SkateSpots/src/i18n/pt/batch2.ts
SkateSpots 6407310213 feat(relay): cut over community relay to self-hosted Newlay
Point SKATE_RELAY, the default relay pools, the DM/CVM/zap relay arrays, the cvm-server + push-service defaults, and the archive default at wss://relay.skate-spots.org, keeping the legacy hosted relay as a fallback during the client-update window. Restored 115/115 archived events; the relay runs behind Caddy with TLS. Docs + AGENTS.md updated.
2026-10-12 12:38:13 +07:00

1652 lines
87 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/** pt (pt-BR) — batch 2: mapUi, mapPage, spotUi, diyUi, labelsUi, feesUi, cardUi, routeUi, sasquatchUi, sasquatchChat. */
const ptBatch2 = {
mapUi: {
mapFooter: {
links: "Links",
hide: "Ocultar barra de links do mapa",
},
findingSpots: "Buscando spots",
loadingSpots: "Carregando spots",
loadingMap: "Carregando mapa...",
mapViewAria: "Visualização de mapa",
listViewAria: "Visualização de lista",
layers: "Camadas",
mapLayers: "Camadas do mapa",
showOnMap: "Mostrar no mapa",
showResults: "Mostrar resultados",
quickActions: "Ações rápidas",
spots: "Spots",
shops: "Lojas",
gear: "Equipamentos",
tours: "Tours",
events: "Eventos",
crews: "Crews",
spotType: "Tipo de Spot",
sortBy: "Ordenar por",
trustLevel: "Nível de confiança",
weather: "Clima",
buySellGear: "Comprar/Vender Equipamentos",
stash: "Stash",
more: "Mais",
newHere: "Novo por aqui?",
welcomeDesc: "Descubra spots de skate, eventos e a comunidade.",
getOnZapstore: "Baixe na Zapstore",
dismiss: "Dispensar",
addedBy: "Adicionado por",
directions: "Rota",
viewDetails: "Ver detalhes",
viewDetailsArrow: "Ver detalhes →",
spotDetails: "Detalhes do spot",
skateShop: "Skate Shop",
skateSpot: "Skate Spot",
youAreHere: "Você está aqui",
conditions: "Condições",
weatherScoreSuffix: "{{score}}/100 clima",
wind: "Vento",
humidity: "Umidade",
airQuality: "Qualidade do ar",
threeDayForecast: "Previsão de 3 dias",
gearForSale: "Equipamentos à venda ({{count}})",
viewItems: "Ver itens →",
viewAllItems: "Ver todos os {{count}} itens →",
viewGear: "Ver equipamentos →",
localTour: "Tour local",
meetAt: "Encontro em: {{place}}",
hours: "{{count}} horas",
level: "nível {{level}}",
viewTour: "Ver tour →",
upcomingEvent: "Próximo evento",
viewEvent: "Ver evento →",
skateCrew: "Skate Crew",
members: "{{count}} membros",
since: "Desde {{year}}",
viewCrew: "Ver crew →",
acceptsBitcoin: "Aceita Bitcoin",
boosted: "Impulsionado",
website: "Site",
offlineSavedSpots: "Offline · mostrando spots salvos",
cantReachRelays: "Não foi possível alcançar os relays",
relayOnlineNoAnswer: "Você está online, mas o relay da comunidade não está respondendo agora.",
youreOffline: "Você está offline.",
savedOnDevice: "Os spots que você já viu estão salvos neste dispositivo e aparecerão aqui.",
noSpotsMatchTitle: "Nenhum spot corresponde",
noSpotsMatchDesc: "Tente uma busca diferente ou limpe os filtros.",
noSpotsMappedYet: "Nenhum spot mapeado ainda",
noSpotsMappedDesc: "Seja o primeiro a mapear seu park — leva um minuto, é seu, e o próximo skatista que passar vai agradecer.",
addFirstSpot: "Adicionar o primeiro spot",
findSpotsNearMe: "Encontrar spots perto de mim",
locating: "Localizando…",
refiningLocation: "Refinando sua localização…",
refiningLocationDesc: "Centralizado no seu último spot — ajustando um sinal de GPS novo.",
locatingYou: "Localizando você…",
locatingDesc: "Obtendo sinal de GPS. Isso pode levar até um minuto na primeira vez.",
foundYou: "Encontramos você",
foundYouDesc: "Mapa centralizado na sua localização.",
locationPermissionNeeded: "Permissão de localização necessária",
permissionNeededDesc: "Permita a localização para o SkateSpots em Configurações → Apps → SkateSpots → Permissões do seu dispositivo, depois toque em Perto de mim novamente.",
locationTimedOut: "Tempo de localização esgotado",
timeoutNativeDesc: "Não foi possível obter a localização a tempo. Se você está em local fechado, o GPS não vê satélites — ative a Localização por rede (Configurações → Localização) ou vá para um local aberto e tente de novo.",
timeoutWebDesc: "Não foi possível obter sua localização a tempo. Verifique seu sinal e tente novamente.",
noLocationProvider: "Nenhum provedor de localização",
noProviderNativeDesc: "Seu celular não está fornecendo localização. Em ROMs focadas em privacidade (ex.: GrapheneOS), ative a Localização por rede em Configurações → Localização, ou garanta que o GPS esteja ligado e tente ao ar livre.",
noProviderWebDesc: "Nenhum provedor de localização disponível. Ative os serviços de localização e tente novamente.",
locationUnavailable: "Localização indisponível",
unavailableNativeDesc: "Ative Localização/GPS nas configurações do seu celular, permita a localização para o SkateSpots (Configurações → Apps → SkateSpots → Permissões) e tente novamente.",
unavailableWebDesc: "Não foi possível determinar sua localização. Certifique-se de que os serviços de localização estejam ativados.",
locationBlocked: "Localização bloqueada",
locationBlockedDesc: "Seu navegador bloqueou o acesso à localização para este site. Veja como reativar:",
locationPlatformAndroid: "Chrome no Android",
locationPlatformIos: "Safari no iOS",
locationPlatformDesktop: "Chrome no desktop",
locationPlatformFirefox: "Firefox",
locationStepsAndroid: "Toque no ícone de cadeado na barra de endereço → Configurações do site → Localização → Permitir",
locationStepsIos: "App Ajustes → Safari → Localização → Permitir (ou toque no botão \"AA\" na barra de endereço do Safari)",
locationStepsDesktop: "Clique no ícone de cadeado → Configurações do site → Localização → Permitir",
locationStepsFirefox: "Clique no ícone de cadeado → Conexão segura → Mais informações → Permissões → Acessar sua localização → Permitir",
gotIt: "Entendi",
addSpot: "Adicionar Spot",
addShop: "Adicionar Loja",
addEvent: "Adicionar Evento",
addSpotHereTitle: "Adicionar um spot aqui?",
addSpotHereDesc: "Solte um pino onde você tocou",
sellGear: "Vender Equipamentos",
offerTour: "Oferecer Tour",
closeAddMenu: "Fechar menu de adição",
addMenuAria: "Adicionar spot, loja, evento, equipamento ou tour",
localChat: "Chat local",
localChatDesc: "Chat ao vivo para onde o mapa estiver centralizado. Escolha o alcance do canal.",
btcMapShowing: "Mostrando {{count}} lugares onde você pode Spedn seus sats por perto",
btcMapShow: "Mostrar lugares onde você pode Spedn seus sats (via BTC Map)",
yourPrivateStash: "Seu Stash Privado",
stashIntro: "Acompanhe seus equipamentos, defina preços e encontre trocas com outros skatistas.",
encryptionRequired: "Criptografia necessária",
encryptionRequiredDesc: "Use um signer com suporte a NIP-44 (Alby, nos2x, Amber).",
myStash: "Meu Stash",
encrypted: "Criptografado",
itemsCount: "{{count}} itens",
items: "Itens",
wishlist: "Lista de desejos",
types: "Tipos",
stashEmpty: "Seu stash está vazio",
addFirstItem: "Adicionar primeiro item",
wishlistCount: "Lista de desejos ({{count}})",
myGearCount: "Meus equipamentos ({{count}})",
openFullStash: "Abrir Stash completo",
addItem: "Adicionar item",
searchSpotsPlaceholder: "Buscar spots...",
selected: "Selecionado",
noSpotsFound: "Nenhum spot encontrado. Tente uma busca diferente.",
addingSpotsHint: "Adicionar spots ajuda os usuários a te encontrar ao navegar por locais específicos",
report: "Denunciar",
spotSingular: "1 spot",
spotPlural: "{{count}} spots",
view: "Ver",
myCollections: "Minhas coleções",
collectionsSubtitle: "Organize seus spots favoritos em listas personalizadas",
newCollection: "Nova coleção",
loginToCreate: "Entre para criar coleções",
loginToCreateDesc: "Salve seus spots favoritos em listas personalizadas como \"Viagem a Barcelona 2024\" ou \"Melhores rails de SP\"",
noCollections: "Nenhuma coleção ainda",
noCollectionsDesc: "Crie sua primeira coleção para começar a organizar spots",
createFirstCollection: "Crie sua primeira coleção",
createNewCollection: "Criar nova coleção",
createCollectionDesc: "Dê um nome e uma descrição opcional à sua coleção",
collectionName: "Nome da coleção",
collectionNamePlaceholder: "Viagem a Barcelona 2024",
descriptionOptional: "Descrição (opcional)",
descriptionPlaceholder: "Meus spots favoritos da minha viagem a Barcelona...",
creating: "Criando...",
createCollection: "Criar coleção",
editCollection: "Editar coleção",
saving: "Salvando...",
saveChanges: "Salvar alterações",
deleteCollectionTitle: "Excluir coleção?",
deleteCollectionDesc: "Isso excluirá permanentemente \"{{title}}\". Os spots em si não serão afetados.",
deleting: "Excluindo...",
collectionCreated: "Coleção criada!",
collectionCreatedDesc: "\"{{title}}\" está pronta para spots",
collectionCreateFailed: "Falha ao criar a coleção",
collectionUpdated: "Coleção atualizada!",
changesSaved: "Suas alterações foram salvas",
collectionUpdateFailed: "Falha ao atualizar a coleção",
collectionDeleted: "Coleção excluída",
collectionDeletedDesc: "\"{{title}}\" foi removida",
collectionDeleteFailed: "Falha ao excluir a coleção",
somethingWentWrong: "Algo deu errado",
},
mapPage: {
title: "Lojas e Spots",
spots: "Spots",
shops: "Lojas",
filters: "Filtros",
listView: "Lista",
mapView: "Mapa",
nearMe: "Perto de mim",
searchPlaceholder: "Buscar spots...",
noSpotsInArea: "Nenhum spot nesta área",
zoomIn: "Aproximar",
zoomOut: "Afastar",
myLocation: "Minha localização",
locationsFound: "{{count}} locais encontrados",
spotsOnly: "Somente spots",
shopsOnly: "Somente lojas",
spotsAndShops: "Spots e Lojas",
noSpotsMatch: "Nenhum spot corresponde aos seus filtros.",
noSpotsYet: "Nenhum spot foi adicionado ainda.",
addFirstSpot: "Adicionar primeiro spot",
},
spotUi: {
claim: {
areYouOwner: "Este spot é seu?",
privateDesc: "Este spot está marcado como privado. Se você é dono ou cuida dele, reivindique-o — um moderador do SkateSpots confirma a propriedade e então você assume o anúncio.",
claimSpot: "Reivindicar este spot",
nip05Required: "Você precisa de um NIP-05 verificado para reivindicar um spot privado (prova de que você controla uma identidade Nostr). Adicione um no seu perfil e volte aqui.",
addNip05: "Adicionar NIP-05 nas Configurações",
pendingTitle: "Reivindicação aguardando revisão",
pendingDesc: "Sua reivindicação foi enviada. Um moderador do SkateSpots vai revisá-la — você poderá concluir a reivindicação assim que for aprovada.",
approvedTitle: "Reivindicação aprovada",
approvedDesc: "Um moderador aprovou sua reivindicação. Conclua para se tornar o dono deste spot.",
complete: "Concluir reivindicação",
submitted: "Reivindicação enviada",
submittedDesc: "Um moderador vai revisar sua reivindicação. Você assumirá o spot assim que for aprovada.",
submitFailed: "Não foi possível enviar a reivindicação",
submit: "Enviar reivindicação",
submitting: "Enviando…",
confirmTitle: "Reivindicar \"{{title}}\"?",
confirmIntro: "Você está pedindo para se tornar o dono deste spot privado.",
confirmBullet1: "Um moderador do SkateSpots revisa o pedido (não podemos verificar propriedade, apenas chaves Nostr)",
confirmBullet2: "Se aprovado, você conclui a reivindicação para se tornar o dono e pode editar o spot",
confirmBullet3: "O spot original permanece no Nostr — a rede é descentralizada",
adminTitle: "Reivindicações de propriedade pendentes",
adminApprove: "Aprovar",
adminApproved: "Aprovado",
adminApprovedDesc: "Agora eles podem concluir a reivindicação do spot.",
adminApproveFailed: "Não foi possível aprovar a reivindicação",
loginRequired: "Entre para reivindicar este spot privado, ou para pedir a propriedade.",
},
abandonedDesc: "Última atualização {{time}}. Se o dono original estiver inativo, você pode reivindicar este spot para mantê-lo e melhorá-lo.",
claimedNotice: "Anúncio reivindicado",
claimedNoticeDesc: "Este spot foi republicado por um novo dono após uma reivindicação. O anúncio original ainda pode existir separadamente.",
abandonedLoginDesc: "Última atualização {{time}}. Entre para reivindicar e manter este spot.",
accessDeniedDesc: "Você só pode editar spots que você criou.",
accessDeniedTitle: "Acesso negado",
addAtLeastOneTag: "Adicione pelo menos uma tag.",
additionalDetails: "Detalhes adicionais (opcional)",
additionalDetailsPlaceholder: "Forneça qualquer contexto adicional que possa ajudar...",
addNewTags: "Adicionar novas tags:",
addNip05InSettings: "Adicionar NIP-05 nas Configurações",
addPhoto: "Adicionar foto",
addPhotoDesc: "Contribua com uma foto para ajudar outros a descobrir este spot.",
addPhotoOrDescription: "Adicione uma foto ou uma descrição",
addPhotoOrDescriptionDesc: "Dê aos skatistas algo para se orientar — uma imagem, ou uma linha sobre o lugar.",
addPhotos: "Adicionar fotos",
addPhotoToSpot: "Adicionar foto ao spot",
adminDeleteDialogDesc: "Como admin do SkateSpots, você está removendo \"{{title}}\". Ele ficará oculto em todo o app para todos e um pedido de exclusão será enviado aos relays.",
adminDeleteReason: "Admin do SkateSpots removeu o spot \"{{title}}\"",
airQuality: "Qualidade do ar",
altSkateSpot: "Skate spot: {{title}}",
areYouShopOwner: "Você é o dono da loja?",
askBeforeSkating: "Pergunte antes de andar",
backToSpot: "Voltar ao spot",
beFirstToListGear: "Seja o primeiro a anunciar equipamentos neste spot!",
beFirstToSay: "Seja o primeiro a dizer algo.",
byAuthor: "por {{name}}",
captionPlaceholder: "Adicione uma legenda (opcional) - descreva o que há na foto, quando foi tirada, etc.",
chatPublicNote: "Qualquer pessoa pode ler isto — as mensagens são públicas e efêmeras. Para conversas privadas, use as Mensagens Diretas.",
checkPinBelow: "Confira o pino abaixo antes de adicionar uma duplicata.",
claimBullet1: "Você se torna o dono e pode editar o spot",
claimBullet2: "O spot original permanece (o Nostr é descentralizado)",
claimBullet3: "Sua versão pode aparecer ao lado do original",
claimFailed: "Falha na reivindicação",
claiming: "Reivindicando...",
claimIntro: "Você está prestes a reivindicar a propriedade deste spot. Isso criará sua própria versão do spot que você pode editar e manter.",
claimSpot: "Reivindicar spot",
claimThisSpot: "Reivindicar este spot",
claimTitle: "Reivindicar \"{{title}}\"?",
claimWhatHappens: "O que acontece quando você reivindica:",
coachesAndFilmersAvailable: "Coaches e filmers disponíveis neste spot",
coachesCount: "Coaches ({{count}})",
coachHere: "Coach aqui",
community: "Comunidade",
communityVerified: "Verificado pela comunidade",
communityVerifiedTitle: "Outro skatista contribuiu aqui (foto ou relato de status).",
conditions: "Condições",
contactForPermission: "Contato para permissão",
contactInfo: "Informações de contato",
contributePhoto: "Contribuir com foto",
contributing: "Contribuindo...",
couldNotSendMessage: "Não foi possível enviar a mensagem.",
couldNotSubmit: "Não foi possível enviar",
couldNotUploadPhoto: "Não foi possível enviar a foto. Você pode adicionar uma abaixo.",
crewsThatSkateHere: "Crews que andam aqui",
current: "Atuais:",
currentTags: "Tags atuais neste spot:",
daysAgo: "há {{count}} dia",
daysAgoPlural: "há {{count}} dias",
deleteDialogDesc: "Isso excluirá permanentemente \"{{title}}\" de todos os relays. Esta ação não pode ser desfeita.",
deletedSpotReason: "Spot excluído",
deleteFailed: "Falha ao excluir",
deleteSpot: "Excluir spot",
deleteSpotTitle: "Excluir spot?",
differentSpotPublishAnyway: "É um spot diferente — publicar mesmo assim",
dragDropOrClick: "Arraste e solte ou clique",
dropPhotos: "Solte as fotos",
duplicateOne: "Há um spot a menos de 60 m do seu pino. Se for o mesmo lugar, adicione sua foto ou um relato de status lá em vez de criar uma duplicata.",
duplicateOther: "Há spots a menos de 60 m do seu pino. Se for o mesmo lugar, adicione sua foto ou um relato de status lá em vez de criar uma duplicata.",
editSpotSeoDesc: "Edite seu spot de skate.",
failedToContribute: "Falha ao contribuir",
failedToPublish: "Falha ao publicar",
failedToPublishDesc: "Algo deu errado. Verifique o console para detalhes.",
failedToSubmitReport: "Falha ao enviar a denúncia",
failedToSuggestTags: "Falha ao sugerir tags",
failedToUpdate: "Falha ao atualizar",
failedToUploadImage: "Falha ao enviar a imagem",
failedToUploadPhoto: "Falha ao enviar a foto",
feelsLikeTemp: "Sensação de {{temp}}°C",
filmersCount: "Filmers ({{count}})",
filmHere: "Filmar aqui",
gearSwap: "Troca de equipamentos",
geolocationNotSupported: "Geolocalização não suportada",
geolocationNotSupportedDesc: "Seu navegador não suporta geolocalização.",
getDirections: "Obter rota",
hangTight: "Aguarde",
hangTightDesc: "Sua foto ainda está sendo enviada. Ela será anexada em um segundo.",
helpImproveSpot: "Ajude a melhorar este spot adicionando fotos ou sugerindo tags",
hiddenByModerator: "Ocultado por um moderador",
hiddenByModeratorDesc: "Este spot não aparece no mapa nem na busca. Você ainda pode vê-lo porque é seu. Editá-lo não vai desocultá-lo — ele permanece oculto até um moderador retirar o veredito.",
humidity: "Umidade",
imageUploaded: "Imagem enviada",
imageUploadedDesc: "Sua imagem foi enviada com sucesso.",
imHere: "Estou aqui",
invalidCoordinates: "Coordenadas inválidas",
invalidCoordinatesDesc: "Insira uma latitude válida (-90 a 90) e longitude válida (-180 a 180).",
invalidNpub: "npub inválido",
invalidNpubDesc: "Insira um endereço npub válido.",
lastReported: "último {{time}}",
listGear: "Anunciar equipamentos",
listYourGearHere: "Anuncie seus equipamentos aqui",
loadingChat: "Carregando chat…",
locationError: "Erro de localização",
locationFound: "Localização encontrada",
locationFoundDesc: "Sua localização atual foi definida.",
locationRequired: "Localização necessária",
locationRequiredDesc: "Insira coordenadas ou use sua localização atual.",
loginRequiredTitle: "Login necessário",
logInToChat: "Entre para participar do chat local.",
logInToContributePhotos: "Entre para contribuir com fotos",
loginToEditSpot: "Você precisa entrar para editar este spot.",
logInToReport: "Você precisa estar logado para denunciar conteúdo.",
logInToReportStatus: "Entre para relatar o status deste spot.",
logInToSuggestTags: "Entre para sugerir tags",
manageNip05ToClaim: "Gerenciar NIP-05 para reivindicar",
meetAtSpotForPickup: "💡 Encontro neste spot para retirada segura",
memberOne: "{{count}} membro",
memberOther: "{{count}} membros",
messageFailed: "Falha na mensagem",
messageMapper: "Mensagem ao mapeador",
messagePlaceholder: "Envie uma mensagem para este spot… (tente /me ou /who)",
messagesHiddenOne: "{{count}} mensagem ocultada pelo seu filtro de confiança. Reduza o filtro para ver mais.",
messagesHiddenOther: "{{count}} mensagens ocultadas pelo seu filtro de confiança. Reduza o filtro para ver mais.",
messagesHiddenShortOne: "{{count}} mensagem ocultada pelo seu filtro de confiança",
messagesHiddenShortOther: "{{count}} mensagens ocultadas pelo seu filtro de confiança",
metresAway: "a {{distance}} m de distância",
moderatorVouchedDesc: "Um moderador revisou este spot e atestou sua qualidade. Mandou bem.",
monthsAgo: "há {{count}} mês",
monthsAgoPlural: "há {{count}} meses",
newOwnerNpub: "npub do novo dono",
newOwnerNpubHint: "Insira o npub do usuário para quem você quer transferir este spot.",
nip05RequiredToClaim: "⚠️ Verificação NIP-05 necessária para reivindicar lojas",
noCommunitySignalTitle: "Ainda sem foto da comunidade ou relato de status — ninguém confirmou este lugar.",
breakdownPhotos: "{{count}} foto(s)",
breakdownStatus: "{{count}} relato(s) de status",
breakdownComments: "{{count}} comentário(s)",
breakdownReactions: "{{count}} reação(ões)",
breakdownCollections: "{{count}} salvamento(s)",
breakdownZaps: "{{count}} zap(s)",
breakdownTags: "{{count}} sugestão(ões) de tag",
breakdownCrews: "{{count}} crew(s)",
breakdownLab: "{{count}} link(s) pro",
verifyNudgeTitle: "Seja o primeiro a confirmar este spot",
verifyNudgeBody: "Uma foto ou um “já andei aqui” é como um spot é verificado — ajude o próximo skatista.",
verifyNudgeStatus: "Já andei aqui",
communityChip: "Comunidade",
seenChip: "Visto",
noGearListedYet: "Nenhum equipamento anunciado ainda",
noMessagesYet: "Ainda não há mensagens neste canal local. Diga oi — \"alguém anda hoje à noite?\"",
noPhoto: "Sem foto",
noReportsYet: "Nenhuma denúncia ainda",
noTags: "Sem tags",
notASkateSpot: "Não é um skate spot",
offerServicesHere: "💡 Ofereça seus serviços neste spot",
photoCaptured: "Foto capturada!",
photoCapturedDesc: "Sua foto foi enviada com sucesso.",
photoContributed: "Foto contribuída!",
photoContributedDesc: "Sua foto foi adicionada a este spot.",
photosAdded: "Suas fotos foram adicionadas.",
photosRecommended: "fortemente recomendado — spots sem foto ficam marcados como Não verificado",
photosUploaded: "{{count}} fotos enviadas",
photoUploaded: "Foto enviada",
photoUploadedDesc: "Adicione uma legenda e envie para contribuir!",
photoUploadFailed: "Falha no envio da foto",
pleaseTryAgain: "Tente novamente",
public: "Público",
publicChatTitle: "Qualquer pessoa pode ler as mensagens deste canal — ele é público e não criptografado.",
recentReports: "Denúncias recentes",
recipientRequired: "Destinatário obrigatório",
recipientRequiredDesc: "Insira o npub do novo dono.",
removeAdmin: "Remover (admin)",
removeSpot: "Remover spot",
removeSpotAdminTitle: "Remover este spot? (admin)",
reportOne: "denúncia",
reportContent: "Denunciar conteúdo",
reportContentDesc: "Ajude a manter a comunidade segura denunciando conteúdo inadequado.",
reportedBySkaters: " por {{count}} skatistas — em análise. Se este é um spot real, adicione uma foto ou um relato de status para confirmá-lo.",
reportedNotASpot: "Denunciado como não sendo um skate spot",
reportingType: "Denunciando {{type}}",
reports: "denúncias",
reportShop: "Denunciar loja",
reportSpot: "Denunciar spot",
reportStatus: "Relatar status",
reportSubmitted: "Denúncia enviada",
reportSubmittedDesc: "Obrigado por ajudar a manter o SkateSpots seguro.",
reportSubmittedLong: "Obrigado por ajudar a manter o SkateSpots seguro e preciso. Sua denúncia será revisada por membros confiáveis da comunidade.",
reportSubmittedTitle: "Denúncia enviada",
report: {
notASkateSpot: {
label: "Não é um skate spot",
description: "Um registro de teste, ou um lugar que não é para skate de jeito nenhum",
},
fakeSpot: {
label: "Spot falso/inexistente",
description: "Este spot não existe ou a localização está errada",
},
stolenPhotos: {
label: "Fotos roubadas/falsas",
description: "As fotos são de banco de imagens ou roubadas de outro lugar",
},
spamAd: {
label: "Spam ou propaganda",
description: "Conteúdo promocional ou anúncios duplicados",
},
dangerousLocation: {
label: "Local perigoso",
description: "Propriedade privada, inseguro ou ilegal de acessar",
},
inappropriateContent: {
label: "Conteúdo inadequado",
description: "Contém conteúdo ofensivo ou adulto",
},
impersonation: {
label: "Impersonação",
description: "Alguém se passando por outra pessoa",
},
other: {
label: "Outro",
description: "Algo mais não listado acima",
},
},
targetType: {
spot: "Spot",
event: "Evento",
tour: "Tour",
shop: "Loja",
user: "Usuário",
listing: "Anúncio",
coach: "Coach",
filmer: "Filmer",
},
sameOwner: "Mesmo dono",
sameOwnerDesc: "Não é possível transferir para o dono atual.",
saveChanges: "Salvar alterações",
saving: "Salvando...",
services: "Serviços",
shareSpotText: "Confira este skate spot: {{title}}",
shelter: "Abrigo",
shelterHint: "Este spot é exposto ao tempo? Ajuda os skatistas a encontrar lugares secos quando chove.",
shopClaimDesc: "Se você é dono ou cuida desta loja, pode reivindicá-la para verificar a propriedade e gerenciar o anúncio.",
shopClaimNip05Hint: "Para reivindicar esta loja, adicione um identificador NIP-05 que corresponda ao domínio do site da loja.",
skatersActiveDesc: "Pessoas que postaram neste canal nas últimas 24h.",
skatersActiveOne: "{{count}} skatista ativo aqui",
skatersActiveOther: "{{count}} skatistas ativos aqui",
skatersSellingGear: "Skatistas deste spot estão vendendo equipamentos",
skateSpot: "Skate Spot",
somethingWentWrong: "Algo deu errado",
spot: "Spot",
spotAdded: "Spot adicionado!",
spotAddedDesc: "Seu skate spot foi publicado na rede.",
spotAddedNoPhoto: "Publicado — e marcado como Não verificado até alguém adicionar uma foto. Uma imagem do spot ajuda muito.",
spotChat: "Chat do spot",
spotClaimed: "Spot reivindicado!",
spotClaimedDesc: "Agora você é o dono deste spot. Você pode editá-lo a partir do seu perfil.",
spotDeleted: "Spot excluído",
spotDeletedDesc: "Pedido de exclusão enviado aos relays. A maioria dos relays removerá este conteúdo.",
spotMayAlreadyBeOnMap: "Esse spot já pode estar no mapa",
spotMayAlreadyExist: "Este spot já pode existir",
spotMayBeAbandoned: "O spot pode estar abandonado",
spotPhotoAlt: "Spot",
spotRemoved: "Spot removido",
spotRemovedDesc: "Este spot foi removido e ficará oculto em todo o SkateSpots.",
spotSeoDesc: "Veja este spot de skate no SkateSpots.",
spotStatus: "Status do spot",
spotStatusDesc: "\"{{title}}\" ainda dá pra andar? Avise a comunidade sobre o estado atual.",
spotTypeRequired: "Tipo de spot obrigatório",
spotTypeRequiredDesc: "Escolha um tipo de spot para os skatistas saberem com o que vão se deparar.",
spotUpdated: "Spot atualizado!",
spotUpdatedDesc: "Suas alterações foram publicadas na rede.",
staffVerifiedTitle: "Um admin do SkateSpots revisou e atestou este spot.",
statusNotePlaceholder: "Opcional: adicione detalhes (ex.: \"quinas novas no ledge\", \"segurança expulsa depois das 18h\")",
statusReported: "Status relatado",
statusReportedDesc: "Obrigado por manter o mapa atualizado. Seu relato está no ar.",
submitReport: "Enviar denúncia",
submitting: "Enviando...",
suggestedByUser: "Sugerido por {{count}} usuário",
suggestedByUsers: "Sugerido por {{count}} usuários",
suggestedTagsContent: "Tags sugeridas para {{title}}: {{tags}}",
suggestNTags: "Sugerir {{count}} tags",
suggestOneTag: "Sugerir 1 tag",
suggestTags: "Sugerir tags",
suggestTagsDesc: "Ajude a categorizar este spot sugerindo tags relevantes.",
tags: "Tags",
tagsHint: "Adicione tags para recursos, superfícies, vibes (máx. {{max}})",
tagsSuggested: "Tags sugeridas!",
tagsSuggestedDesc: "Suas sugestões de tags foram enviadas.",
takePhoto: "Tirar foto",
threeDayForecast: "Previsão de 3 dias",
tipTheMapper: "Dar gorjeta ao mapeador",
tipTheMapperDesc: "Achou este spot útil? Envie um zap para agradecer ao mapeador!",
titleRequired: "Nome obrigatório",
titleRequiredDesc: "Insira um nome para este spot.",
today: "Hoje",
tomorrow: "Amanhã",
transferDesc: "Transferir \"{{title}}\" para outro usuário. Esta ação não pode ser desfeita.",
transferFailed: "Falha na transferência",
transferOwnership: "Transferir propriedade",
transferRequestContent: "Pedido de transferência de propriedade do spot \"{{title}}\"",
transferRequested: "Transferência solicitada",
transferRequestedDesc: "O novo dono precisará reivindicar o spot para concluir a transferência.",
transferring: "Transferindo...",
transferSpotOwnership: "Transferir propriedade do spot",
transferWarningDesc: "Após a transferência, você não poderá mais editar ou excluir este spot.",
typeToSearchTags: "Digite para buscar ou adicionar tags...",
underReview: " — em análise. Se este é um spot real, adicione uma foto ou um relato de status para confirmá-lo.",
untitledSpot: "Spot sem título",
unverified: "Não verificado",
updateDetailsFor: "Atualize os detalhes de {{title}}",
updateSpotDesc: "Atualize as informações deste spot. Todos os campos marcados com * são obrigatórios.",
uploadAPhoto: "Envie uma foto",
uploadAPhotoHint: "Arraste e solte ou clique · JPG, PNG, WebP",
uploadedAlt: "Enviado",
uploadFailed: "Falha no envio",
uploadingPhoto: "Enviando foto…",
uploadPhotoFirst: "Envie uma foto primeiro.",
uvIndex: "Índice UV",
verifiedBySkateSpots: "Verificado pelo SkateSpots",
viewPhotoFullScreen: "Ver foto em tela cheia",
viewPhotoOf: "Ver foto {{n}} de {{total}}",
warning: "Aviso",
weatherConditions: "Condições do tempo",
weatherOnly: "apenas tempo",
weatherOnlyUnconfirmed: "Apenas tempo. Ninguém confirmou que este é um skate spot ainda, então não há pontuação de condições — adicione uma foto ou um relato de status para confirmá-lo.",
whyReporting: "Por que você está denunciando isto?",
wind: "Vento",
yearsAgo: "há {{count}} ano",
yearsAgoPlural: "há {{count}} anos",
},
diyUi: {
title: "DIY — Faça você mesmo",
tagline: "Guias, ferramentas abertas e projetos para construir seus próprios decks, rampas e pistas de concreto — e depois encontrar as pessoas, os lugares e o mercado para acompanhar.",
doItWithPeople: "Faça com gente",
backToDiy: "Voltar ao DIY",
calc: {
title: "Calculadora de custo de deck",
intro: "Quanto custa fazer um deck — mão de obra, equipamento, materiais, tempo de processo, embalagem e margem — e um preço de venda justo. Salvo neste dispositivo.",
},
designer: {
title: "Designer de deck",
intro: "Modele o contorno de um skate ou longboard e exporte um molde imprimível em 1:1, um SVG ou um DXF para CNC. Salvo neste dispositivo.",
presets: "Predefinições",
dimensions: "Dimensões",
shape: "Formato",
kicks: "Kicks",
hardware: "Furos dos trucks",
width: "Largura máx.",
wheelbase: "Distância entre eixos",
nose: "Comprimento do nose",
tail: "Comprimento do tail",
length: "Comprimento total",
waist: "Cintura",
endRound: "Arredondamento das pontas",
concave: "Concave",
thickness: "Espessura",
tailKick: "Kick do tail",
noseKick: "Kick do nose",
holeNew: "New school (2.125″)",
holeOld: "Old school (2.5″)",
holeSpacing: "New school é 2.125″ × 1.625″ (54 × 41 mm); old school é 2.5″ × 1.625″. Furos de montagem de 3/16″.",
topView: "Vista superior",
sideView: "Perfil lateral",
concaveSection: "Seção de concave",
export: "Exportar",
pdfA4: "PDF 1:1 · A4",
pdfLetter: "PDF 1:1 · Letter",
printNote: "Imprima o PDF em 100% (sem “ajustar à página”) e depois junte as folhas usando as cruzes nos cantos. O SVG também é em tamanho real.",
note: "Este é o contorno 2D que você traça e corta. Para formas 3D completas e design de molde, uma ferramenta CAD de verdade ainda é a escolha certa.",
},
source: "Fonte",
comingSoon: "Em breve",
footer: "Guias passo a passo estão a caminho. Por enquanto: encontre quem constrói no The Lab, mapeie seu spot e compre ou venda no Marketplace. Ande com segurança — proteções, luvas e óculos.",
categories: {
boards: "Decks",
ramps: "Rampas e obstáculos de madeira",
concrete: "Pistas de concreto e DIY",
repairs: "Consertos e afinação",
tools: "Ferramentas e projetos",
},
cards: {
ossBuild: {
title: "Construa um skate",
blurb: "Fabricação de deck passo a passo — lâminas, moldes, prensas e acabamento.",
},
sk8cad: {
title: "SK8CAD",
blurb: "CAD open-source para formatos de deck, concave e design de molde.",
},
deckCost: {
title: "Custo e preço do deck",
blurb: "Calcule materiais, mão de obra e um preço de venda justo antes de construir.",
},
deckDesigner: {
title: "Designer de deck",
blurb: "Modele um contorno e imprima um molde 1:1 — ou exporte SVG/DXF para CNC.",
},
ledgeBox: {
title: "Construa um ledge ou box",
blurb: "Um obstáculo de madeira para iniciantes que você monta em um fim de semana.",
},
quarterpipe: {
title: "Construa um quarterpipe",
blurb: "Projetos de rampa, transição e coping para um mini no quintal.",
},
flatbar: {
title: "Construa um flatbar",
blurb: "Barato, portátil e a melhor forma de aprender rails.",
},
concreteBasics: {
title: "Noções básicas de concreto",
blurb: "Misturar, montar a forma e dar acabamento a um ledge ou bank que dura.",
},
coping: {
title: "Coping e bordas",
blurb: "Como instalar o coping e dar acabamento a uma transição para um grind liso.",
},
buyParts: {
title: "Compre peças e equipamentos",
blurb: "Pegue decks, ferragens e ferramentas com vendedores no Marketplace.",
},
mapSpot: {
title: "Mapeie seu spot DIY",
blurb: "Construiu algo? Adicione ao mapa para que outros encontrem e andem nele.",
},
regrip: {
title: "Troque o griptape de um shape",
blurb: "Remova o grip velho e aplique o novo direitinho.",
},
tune: {
title: "Ajuste bearings e trucks",
blurb: "Limpe os bearings, troque os bushings e ajuste a geometria dos seus trucks.",
},
printMolds: {
title: "Moldes impressos em 3D",
blurb: "Arquivos de moldes e bases de alinhamento imprimíveis da comunidade.",
},
sk8cadTools: {
title: "Ferramentas de molde e alinhamento",
blurb: "Projete moldes com bases de alinhamento integradas.",
},
},
actions: {
findBuilder: {
title: "Encontre um Builder",
blurb: "Builders de rampa e DIY no The Lab que podem projetar ou construir para você.",
},
findCrew: {
title: "Encontre uma crew de DIY",
blurb: "Crews focadas em construir — junte-se às que transformam spots em realidade.",
},
mapSpot: {
title: "Mapeie um spot DIY",
blurb: "Adicione o spot que você construiu para que ele fique no mapa.",
},
sellBuilds: {
title: "Venda suas construções",
blurb: "Anuncie decks, rampas ou peças que você faz no Marketplace.",
},
findCoach: {
title: "Encontre um coach",
blurb: "Coaches que ensinam módulos de skate DIY e construção de spots.",
},
},
},
labelsUi: {
spotCategory: {
street: {
label: "Street",
description: "Spots aleatórios encontrados, terreno urbano",
},
transition: {
label: "Transition",
description: "Superfícies curvas/com rampa",
},
park: {
label: "Park",
description: "Skateparks construídos",
},
plaza: {
label: "Plaza",
description: "Praças urbanas (como MACBA, Love Park)",
},
},
spotFeature: {
wallrides: "Wallrides",
stairs: "Escadas e corrimãos",
rails: "Rails",
ledges: "Ledges e guias",
gaps: "Gaps",
flatground: "Flatground",
"manual-pads": "Manual Pads",
"half-pipes": "Half Pipes",
"quarter-pipes": "Quarter Pipes",
"mini-ramps": "Mini Rampas",
bowls: "Bowls",
vert: "Vert Ramps",
"mega-ramps": "Mega Rampas",
hubbas: "Hubbas",
"euro-gaps": "Euro Gaps",
banks: "Banks",
"spine-ramps": "Spine Ramps",
"roll-ins": "Roll-ins",
hips: "Hips",
volcano: "Volcano",
pyramids: "Pirâmides / Funboxes",
"snake-runs": "Snake Runs",
"pump-track": "Pump Track Rollers",
"flat-bars": "Flat Bars",
},
spotType: {
street: "Street",
transition: "Transition",
park: "Park",
plaza: "Plaza",
wallrides: "Wallrides",
stairs: "Escadas e corrimãos",
rails: "Rails",
ledges: "Ledges e guias",
gaps: "Gaps",
flatground: "Flatground",
"manual-pads": "Manual Pads",
"half-pipes": "Half Pipes",
"quarter-pipes": "Quarter Pipes",
"mini-ramps": "Mini Rampas",
bowls: "Bowls",
vert: "Vert Ramps",
"mega-ramps": "Mega Rampas",
hubbas: "Hubbas",
"euro-gaps": "Euro Gaps",
banks: "Banks",
"spine-ramps": "Spine Ramps",
"roll-ins": "Roll-ins",
hips: "Hips",
volcano: "Volcano",
pyramids: "Pirâmides / Funboxes",
"snake-runs": "Snake Runs",
"pump-track": "Pump Track Rollers",
"flat-bars": "Flat Bars",
diy: "DIY",
rail: "Rail",
ledge: "Ledge",
gap: "Gap",
bowl: "Bowl",
stall: "Stall",
slappy: "Slappy",
},
access: {
public: {
label: "Público - Aberto para todos",
},
private: {
label: "Propriedade privada - Necessário permissão",
},
locals: {
label: "Pergunte aos locais primeiro",
},
},
shelter: {
outdoor: {
label: "Ao ar livre",
short: "Ao ar livre",
description: "Totalmente exposto — a chuva interrompe o rolê",
},
partial: {
label: "Parcialmente coberto",
short: "Parcialmente coberto",
description: "Alguns obstáculos ficam secos",
},
covered: {
label: "Coberto / com teto",
short: "Coberto",
description: "Ao ar livre, mas sob um teto",
},
indoor: {
label: "Indoor",
short: "Indoor",
description: "Totalmente fechado — ande com chuva ou sol",
},
},
eventType: {
contest: "Contest",
demo: "Demo",
session: "Sessão",
workshop: "Workshop",
premiere: "Premiere",
tradeshow: "Feira",
gameskate: "Game of Skate",
concert: "🎸 Show",
jam: "🎵 Jam",
festival: "🎪 Festival",
popup: "🎯 Pop-Up",
},
gearCategory: {
deck: "Deck",
trucks: "Trucks",
wheels: "Wheels",
bearings: "Bearings",
shoes: "Tênis de Skate",
clothing: "Roupas",
protective: "Equipamento de proteção",
stickers: "Adesivos",
wax: "Cera",
tools: "Ferramentas",
griptape: "Griptape",
rubbrick: "Rub Brick",
},
gearCondition: {
new: {
label: "Novo",
description: "Nunca usado, ainda na embalagem",
},
like_new: {
label: "Seminovo",
description: "Quase sem uso, excelente estado",
},
good: {
label: "Bom",
description: "Desgaste normal, funciona perfeitamente",
},
well_used: {
label: "Bastante usado",
description: "Mostra desgaste mas ainda funciona",
},
},
priceType: {
fixed: {
label: "Preço fixo",
description: "Preço definido em USD ou sats",
},
free: {
label: "Grátis",
description: "Doando",
},
trade: {
label: "Troca",
description: "Procurando trocar",
},
offer: {
label: "Aceito ofertas",
description: "Preço negociável",
},
},
listingType: {
selling: {
label: "Vendendo",
description: "Anunciando equipamento para venda",
},
wtb: {
label: "Quero comprar",
description: "Procurando equipamento específico",
},
},
tour: {
spotType: {
street: "Street",
park: "Park",
diy: "DIY",
transition: "Transition",
hidden: "Joias escondidas",
},
category: {
local: {
label: "Tour local",
description: "Mostre spots escondidos na sua cidade",
},
national: {
label: "Tour nacional",
description: "Viagens de carro por várias cidades do país",
},
international: {
label: "Tour internacional",
description: "Aventuras transfronteiriças por vários países",
},
destruction: {
label: "World Destruction",
description: "Competição global de equipes estilo KOTR",
},
},
},
crew: {
vibe: {
street: "Street",
transition: "Transition / Vert",
park: "Park",
diy: "DIY",
cruising: "Cruising / Filmagem",
oldschool: "Old School",
allterrain: "All Terrain",
girls: "Garota / Mulher",
youth: "Juventude / Groms",
adaptive: "Adaptado",
punk: "Punk",
hiphop: "Rap / Hip-Hop",
},
focus: {
mixed: "Misto / Geral",
builder: "DIY e Builders",
photo: "Foto e Filmagem",
coaching: "Coaching",
art: "Arte e Design",
music: "Banda e Música",
wellness: "Treino e Fisio",
},
focusDescription: {
mixed: "Uma crew de skate comum — aparece apenas na página de Crews.",
builder: "Uma crew de DIY / construção de park — também aparece no The Lab em Builders.",
photo: "Uma crew de filmagem, fotografia ou edição — também aparece no The Lab em Foto e Filmagem.",
coaching: "Uma crew de coaching / aulas — também aparece no The Lab em Coaching.",
art: "Um coletivo de arte, design, graffiti ou tatuagem — também aparece no The Lab em Arte e Design.",
music: "Uma banda ou coletivo musical — também aparece no The Lab em Música.",
wellness: "Uma crew de treino, fitness ou fisio — também aparece no The Lab em Treino.",
},
lookingFor: {
filmer: "Filmer",
photographer: "Fotógrafo",
editor: "Editor de vídeo",
coach: "Coach",
builder: "Builder de rampa",
artist: "Artista / Designer",
musician: "Músico / Banda",
members: "Novos membros",
},
role: {
filmer: "Filmer",
photographer: "Fotógrafo",
editor: "Editor",
coach: "Coach",
builder: "Builder",
artist: "Artista",
graffiti: "Graffiti",
tattoo: "Tatuagem",
trainer: "Preparador",
musician: "Músico",
judge: "Jurado",
manager: "Gerente de equipe",
og: "OG",
},
},
memberVisibility: {
public: {
label: "Público",
description: "Qualquer pessoa pode te ver nesta crew — na página pública da crew e na descoberta de colegas de crew.",
},
crew: {
label: "Somente crew",
description: "Apenas colegas de crew confirmados e o fundador te veem aqui. Para todos os outros, você aparece como um “membro oculto” anônimo. Observação: isto é privacidade no nível do app — sua tag de membro ainda existe publicamente nos relays, só nunca é mostrada a quem está fora.",
},
},
tagCategory: {
features: {
name: "Recursos",
description: "Obstáculos e terreno",
},
surfaces: {
name: "Superfícies",
description: "Materiais e texturas",
},
sizes: {
name: "Tamanhos",
description: "Dimensões e escala",
},
stairs: {
name: "Número de escadas",
description: "Quantidade de degraus",
},
vibes: {
name: "Vibes",
description: "Atmosfera e condição",
},
location: {
name: "Localização",
description: "Contexto do local",
},
tricks: {
name: "Tricks",
description: "Bom para tricks específicas",
},
},
spotTagCategory: {
street: {
label: "Street",
description: "Spots de rua - escadas, rails, ledges",
},
park: {
label: "Park",
description: "Skateparks - públicos ou privados",
},
diy: {
label: "DIY",
description: "Spots DIY/feitos em casa",
},
plaza: {
label: "Plaza",
description: "Praças públicas com arquitetura amigável ao skate",
},
},
status: {
active: {
label: "Ativo",
description: "Tudo certo — vai lá andar.",
},
bust: {
label: "Bust",
description: "Alto risco de expulsão — segurança ou polícia.",
},
skate_stopped: {
label: "Skate-stopped",
description: "Com pinos / tampado, mas parcialmente andável.",
},
closed: {
label: "Fechado",
description: "Fechado temporariamente — obra ou evento.",
},
gone: {
label: "Acabou",
description: "Demolido, pavimentado ou cercado de vez.",
},
},
price: {
free: "GRÁTIS",
trade: "Troca",
makeOffer: "Aceito ofertas",
offer: "Oferta",
},
},
feesUi: {
feeFeaturedEventLabel: "Evento em destaque",
feeFeaturedEventDesc: "Destaque seu evento no SkateSpots",
feeFeaturedEventBenefit: "Seu evento aparece no topo da página de eventos",
feeLabProfileLabel: "Perfil Lab Pro",
feeLabProfileDesc: "Destaque seus serviços no The Lab",
feeLabProfileBenefit: "Selo Pro + posição em destaque quando os skatistas navegam pelo The Lab",
feeFeaturedShopLabel: "Loja em destaque",
feeFeaturedShopDesc: "Destaque sua skate shop no mapa e no diretório",
feeFeaturedShopBenefit: "Selo verificado + pino em destaque no mapa",
feeFeaturedTourLabel: "Tour em destaque",
feeFeaturedTourDesc: "Destaque seu tour no SkateSpots",
feeFeaturedTourBenefit: "Selo Pro + posição no topo quando os skatistas navegam pelos tours",
duration7d: "7 dias",
duration30d: "1 mês",
duration90d: "3 meses",
duration365d: "12 meses",
metaActive: "{{label}} — Ativo",
daysRemainingOne: "{{count}} dia restante",
daysRemainingMany: "{{count}} dias restantes",
zapRequestContent: "SkateSpots {{label}} ({{tier}})",
errGenerate: "Falha ao gerar a fatura",
paymentReceived: "⚡ Pagamento recebido!",
paymentReceivedDesc: "{{amount}} sats — {{label}} está ativo agora.",
autoPayFailed: "Falha no pagamento automático",
autoPayFailedDesc: "Pague manualmente usando o QR ou a fatura abaixo.",
payStatusUnknown: "Status do pagamento desconhecido — o pagamento pode ter passado. Verifique sua carteira antes de pagar de novo.",
invoiceCopied: "Fatura copiada!",
activeBang: "{{label}} Ativo!",
chooseDuration: "Escolha a duração",
bestValue: "Melhor custo-benefício",
perDay: "{{price}}/dia",
validFor: "Válido por",
amountLine: "~${{usd}} USD · para {{name}} · {{tier}}",
payToContinue: "Pague {{amount}} sats para continuar",
generating: "Gerando fatura…",
processing: "Processando pagamento…",
invoiceQrAlt: "QR da fatura Lightning",
copyInvoice: "Copiar fatura",
openWallet: "Abrir carteira",
payConnected: "Pagar com carteira conectada",
scanAny: "Escaneie com qualquer carteira Lightning",
tryAgain: "Tentar novamente",
proReceiptTitle: "🦧⚡ Sasquatch Pro — você entrou!",
proReceiptPass: "Passe: {{pass}} ({{sats}} sats)",
proReceiptActiveUntil: "Ativo até: {{until}}",
proReceiptUnlocked: "O que você desbloqueou:",
proReceiptBullet1: "• Assistente pessoal — eu leio seu Stash, crews, spots e anúncios",
proReceiptBullet2: "• Rascunhos de ações — anunciar equipamentos, postar status de spot, planejar viagens (você confirma)",
proReceiptBullet3: "• Respostas que usam seu contexto pessoal, não apenas dados públicos",
proReceiptBullet4: "• ⚡ Você apoia diretamente o SkateSpots e o mantém gratuito e sem anúncios",
proReceiptThanks: "Obrigado por manter o SkateSpots gratuito e sem anúncios. Agora vai andar. 🛹",
proReceiptSubject: "Recibo do Sasquatch Pro",
receiptContent: "Sasquatch Pro — passe de apoiador {{tier}} 🦧⚡",
receiptAlt: "Passe de apoiador Sasquatch Pro ({{tier}}), válido até {{until}}",
purchaseComment: "Sasquatch Pro — {{tier}} 🦧",
errLogin: "Entre para fazer upgrade para o Pro.",
errStart: "Não foi possível iniciar a compra.",
errRecord: "Não foi possível registrar seu passe.",
},
cardUi: {
save: "Salvar cartão no Nostr",
saved: "Cartão salvo",
savedDesc: "Seu cartão agora está assinado e verificável.",
saveFailed: "Não foi possível salvar o cartão",
notPublished: "Não publicado",
titleNeon: "Rider",
titleRest: "Card",
saveFrontPng: "Salvar frente (PNG)",
expired: "EXPIRADO",
logoUploaded: "Logo enviado",
logoUploadFailed: "Não foi possível enviar o logo",
venue: "Local vinculado (opcional)",
venueNone: "Sem local",
venueHint: "Escolha um dos seus próprios spots para vincular este passe a um local. Um verificador confirmará que você é o dono.",
venuePick: "Escolha seu local",
parkNoVenue: "Um passe de Park só pode ser emitido pelo dono do local — mapeie um spot que você possui primeiro.",
parkAddVenue: "Adicionar um spot",
parkNeedsVenue: "Escolha um local que você possui",
parkIssued: "Passes emitidos",
parkRevoke: "Revogar",
parkRevoked: "Revogado",
parkRevokeFailed: "Não foi possível revogar",
v: {
valid: "Válido",
validDesc: "Assinatura válida e emitida pelo local.",
expired: "Expirado",
expiredDesc: "Passou da data de validade.",
revoked: "Revogado",
revokedDesc: "O emissor cancelou este passe — não aceite.",
invalid: "Inválido",
invalidDesc: "A assinatura não é verificada. Não confie nela.",
notFound: "Não encontrado",
notFoundDesc: "Nenhum registro correspondente nos relays.",
unverifiedIssuer: "Emissor não verificado",
unverifiedIssuerDesc: "Este passe nomeia um local que não pertence à chave do emissor.",
notBound: "Não vinculado",
notBoundDesc: "Não vinculado a um local — não prova nada sobre acesso.",
noRsvp: "Sem RSVP",
noRsvpDesc: "O titular não tem RSVP registrado para este evento.",
admitted: "Admitido",
admittedDesc: "Evento do organizador + o titular confirmou presença.",
noHolder: "Sem titular no link",
noHolderDesc: "Este QR não tem titular de ingresso (`?h=`), então o titular não pode ser verificado.",
},
passes: {
tab: "Meus passes",
pass: "Passe de acesso",
none: "Nenhum passe ainda. Quando um local ou organizador emitir um para você, ele aparece aqui.",
},
facets: {
title: "Mostrar facetas de identidade",
crews: "Crews",
local: "Local",
roles: "Funções no Lab",
},
roles: {
coach: "Coach",
filmer: "Filmer",
editor: "Editor",
photographer: "Fotógrafo",
builder: "Builder",
artist: "Artista",
graffiti: "Graffiti",
tattoo: "Tatuagem",
trainer: "Preparador",
musician: "Músico",
judge: "Jurado",
organizer: "Organizador",
barber: "Barbeiro",
},
crew: {
crewCard: "CARTÃO DA CREW",
crewSub: "Sua crew, em um cartão",
pick: "Escolha uma crew",
none: "Você ainda não está em uma crew — entre ou crie uma primeiro.",
hint: "O cartão é construído a partir dos dados assinados da própria crew. Edite a crew na página dela para alterá-lo.",
members: "MEMBROS",
spots: "SPOTS",
est: "Desde {{year}}",
openCall: "Vagas abertas",
verifiedCrew: "Crew verificada",
viewCrew: "Ver a crew",
},
event: {
pass: "PASSE DO EVENTO",
passSub: "Um passe para um evento ao qual você vai",
pick: "Escolha um evento",
none: "Nenhum evento ainda — crie um, ou confirme presença em um, primeiro.",
hint: "O passe é construído a partir dos dados assinados do próprio evento. Apenas o organizador pode alterá-lo.",
admits: "ADMITE",
going: "{{count}} vão",
verifiedEvent: "Evento verificado",
viewEvent: "Ver o evento",
issuePass: "Emitir um passe de check-in",
issuePassBtn: "Emitir passe",
issuePassHint: "Um passe assinado para um participante específico — ele mostra na porta.",
notOrganiser: "Apenas o organizador pode emitir passes",
passIssued: "Passe emitido",
issueFailed: "Não foi possível emitir o passe",
issuedPasses: "Passes de check-in emitidos",
},
studio: {
unsaved: "Alterações não salvas",
saved: "Salvo",
saveChanges: "Salvar alterações",
allSaved: "Salvo — tudo em dia",
showOnCard: "Mostrar no cartão",
derived: "Do seu perfil de Skater",
noSkaterProfile: "Ainda sem perfil de Skater —",
editSkaterProfile: "adicione seus estilos e nível",
noPhoto: "Ainda sem foto de perfil —",
addPhoto: "adicione uma no seu perfil",
finishTitle: "Termine seu cartão",
finishDesc: "Uma foto e um perfil de Skater fazem ele parecer real.",
checkPhoto: "Foto de perfil",
checkName: "Nome de exibição",
checkProfile: "Estilos e nível",
checkCrew: "Entre em uma crew",
moreTypes: "Mais tipos de cartão são desbloqueados conforme você mapeia spots que possui, entra em crews ou confirma presença em eventos.",
accent: "Cor de destaque",
accentHint: "Substitui a cor de destaque do tema",
accentClear: "Usar a cor do tema",
logo: "Logo / brasão personalizado",
logoAdd: "Enviar",
logoChange: "Alterar",
logoClear: "Remover",
},
back: {
title: "Verso imprimível",
desc: "Crews, funções, patrocinadores e links no verso",
showBack: "Mostrar verso",
showFront: "Mostrar frente",
empty: "Nada aqui ainda — adicione crews, funções ou patrocinadores.",
},
verify: {
checking: "Verificando o cartão…",
notFound: "Cartão não encontrado",
notFoundDesc: "Nenhum evento correspondente foi encontrado nos relays. Ele pode ter sido excluído, ou o link está errado.",
invalid: "Assinatura inválida",
invalidDesc: "Este evento existe, mas sua assinatura não é verificada. Não confie nele.",
authentic: "Autêntico",
authenticDesc: "A assinatura do emissor é válida.",
kind: "Tipo",
kindPark: "Cartão de acesso ao Park",
kindRider: "Cartão do Rider",
kindCrew: "Cartão da Crew",
kindEvent: "Passe de evento",
organiser: "Organizador",
expired: "Expirado",
valid: "Válido",
holder: "Titular",
ticketHolder: "Titular do ingresso",
rsvp: "RSVP",
rsvpGoing: "Vou",
rsvpInterested: "Interessado",
rsvpNone: "Nenhum RSVP encontrado",
revoked: "Passe revogado",
revokedDesc: "O emissor cancelou este passe — não aceite.",
issuedBy: "Emitido por",
accessLevel: "Nível de acesso",
validThru: "Válido até",
selfIssued: "Status",
selfIssuedDesc: "Cartão de identidade autoemitido",
venue: "Local",
venueVerified: "Verificado — a chave do dono do local corresponde ao emissor.",
venueMismatch: "Este passe nomeia um local que não pertence à chave do emissor.",
venueNone: "Não vinculado a um local.",
viewCard: "Ver o cartão",
disclaimer: "Uma assinatura válida prova quem assinou este cartão — não é prova de habilidade nem de direitos de acesso além do que o local emitiu.",
details: "Detalhes",
invalidLink: "Link inválido",
invalidLinkDesc: "Isso não parece ser um link de cartão válido.",
},
public: {
invalid: "Isso não parece ser um link de cartão válido.",
createYourOwn: "Crie seu próprio cartão",
editYourCard: "Edite seu cartão",
backToEditor: "Voltar ao editor",
backHome: "Voltar ao início",
notCustomised: "Este skatista ainda não personalizou o cartão — esta é a aparência padrão.",
verifyNote: "Escaneie o QR no cartão para verificá-lo.",
},
},
routeUi: {
destination: "Destino",
routeTo: "Rota até {{label}}",
routeToLabel: "Rota até",
search: "Buscar",
description: "Opções de rota e direções no app.",
routeMapAria: "Mapa da rota",
findingLocation: "Encontrando sua localização…",
plottingRoute: "Traçando sua rota…",
refiningLocation: "Refinando localização…",
offlineSavedRoute: "Offline · rota salva {{age}}",
tapMapStart: "Toque no mapa para definir seu ponto de partida",
fitRouteAria: "Ajustar a rota inteira no mapa",
wholeRoute: "Rota inteira",
next: "Próximo",
nextStep: "Próximo · passo {{n}}",
followTheLine: "Siga a linha",
toTheTurn: "até a curva",
toGo: "a percorrer",
tryAgain: "Tentar novamente",
mode: {
foot: "Skate / A pé",
bike: "Bicicleta",
moto: "Moto",
car: "Carro",
transit: "Transporte público",
},
from: "De",
myLocation: "Minha localização",
tapTheMap: "Toque no mapa…",
chooseOnMap: "Escolher no mapa",
direct: "direto",
transferOne: "1 baldeação",
transfers: "{{count}} baldeações",
options: "{{count}} opções",
ride: "andar",
arrive: "chegar",
speedAvg: "{{speed}} km/h média",
stepsCount: "{{count}} passos",
onABoard: "de skate",
usesDrivingRoads: "usa vias para carros",
drivingEstimate: "estimativa para carro",
updating: "atualizando…",
pickMode: "Escolha um modo para ver sua rota.",
waitingLocation: "Aguardando sua localização…",
routeSteps: "Passos da rota",
walkingRoute: "rota a pé — mais rápida de skate",
planningView: "Modo de planejamento — toque em Iniciar para seguir com curvas ao vivo, voz e chegada.",
leaveNow: "Sair agora",
departAt: "Partir às",
arriveBy: "Chegar até",
departureTime: "Horário de partida",
arrivalTime: "Horário de chegada",
only: "Somente",
clear: "limpar",
itinerary: "Itinerário",
group: {
bus: "Ônibus",
tram: "Bonde",
metro: "Metrô",
train: "Trem",
ferry: "Balsa",
},
walk: "A pé",
rideVerb: "Andar",
walkLower: "a pé",
rideLower: "andar",
toStop: "até",
track: "plataforma {{track}}",
stopOne: "1 parada",
stopsCount: "{{count}} paradas",
tickets: "ingressos ↗",
done: "Concluir",
stop: "Parar",
start: "Iniciar",
arrived: "Você chegou. 🛹",
voiceOnNote: "A tela fica ligada · voz ativada — as curvas e a chegada são faladas.",
voiceOffNote: "A tela fica ligada · voz desativada.",
followNote: "Curvas, voz e chegada enquanto você anda. Mantém a tela ligada.",
voiceOffAria: "Desativar a orientação por voz",
voiceOnAria: "Ativar a orientação por voz",
voiceStart: "Iniciando a navegação",
voiceArrived: "Você chegou",
voiceIn: "Em {{metres}} metros, {{instruction}}",
voiceContinue: "continue",
voiceContinueCaps: "Continue",
errPermissionDenied: "Permissão de localização negada.",
errWaitingGps: "Aguardando um sinal de GPS…",
errPermissionDeniedLong: "Permissão de localização negada. Ative a localização para traçar a rota de onde você está.",
errNoLocation: "Não foi possível obter sua localização. Tente novamente.",
errNoLocationShort: "Não foi possível obter sua localização.",
errTransitNoRouteFiltered: "Nenhuma rota para esse horário ou modo de transporte — tente outro horário, ou inclua mais modos.",
errTransitNoRoute: "Nenhuma rota de transporte público encontrada aqui — esta área pode não publicar horários abertos.",
errTransitUnreachable: "Não foi possível alcançar o serviço de transporte público. Verifique sua conexão e tente novamente.",
errRoutingBusy: "O serviço de rotas está sobrecarregado agora — tente novamente em um instante.",
errNoRouteMode: "Nenhuma rota para este modo — o destino pode estar fora da malha viária. Tente outro modo.",
errRoutingUnreachable: "Não foi possível alcançar o serviço de rotas. Verifique sua conexão e tente novamente.",
departures: "Partidas",
upcomingFrom: "Próximas partidas de {{stop}}",
loadingDepartures: "Carregando partidas…",
noDepartures: "Nenhuma partida próxima encontrada nesta parada.",
live: "ao vivo",
cancelled: "cancelado",
refresh: "Atualizar",
tripLoginTitle: "Entre para salvar",
tripLoginDesc: "Faça login para guardar esta viagem como uma Coleção.",
tripCollectionTitle: "Viagem de skate a {{destination}} 🛹",
tripCollectionDesc: "Plano de viagem do The Sasquatch — {{count}} dias em {{destination}}.",
tripCollectionDescOne: "Plano de viagem do The Sasquatch — {{count}} dia em {{destination}}.",
tripSavedTitle: "Salvo nas Coleções 🦧",
tripSavedDesc: "Sua viagem a {{destination}} está salva.",
tripSaveFailed: "Não foi possível salvar",
tripSaveFailedDesc: "Tente novamente em um segundo.",
daysInDestinationOne: "{{count}} dia em {{destination}}",
daysInDestination: "{{count}} dias em {{destination}}",
wetForecast: "Previsão de chuva — procure uma crew local para opções cobertas/indoor.",
dayLabel: "Dia {{n}}",
freeSkate: "Skate livre — explore e filme. 🎥",
tapToBook: "toque para agendar / zap ⚡",
localCrews: "Crews locais",
saving: "Salvando…",
savedToCollections: "Salvo nas Coleções",
saveSpotOne: "Salvar {{count}} spot em uma Coleção",
saveSpots: "Salvar {{count}} spots em uma Coleção",
flights: "Voos",
stays: "Hospedagem",
gettingAround: "Como se locomover",
noMiddleman: "Eu planejo o skate — voos e hospedagem abrem nos sites reais (sem KYC, sem intermediário).",
ageJustNow: "agora mesmo",
ageMinAgo: "há {{count}} min",
ageHourAgo: "há {{count}} h",
ageDayAgo: "há {{count}} d",
skateRightHere: "bem aqui",
skateMin: "~{{count}} min de rolê",
skateHours: "~{{hours}} h de rolê",
maneuver: {
headOut: "Saia",
arrive: "Chegue ao spot",
continueStraight: "Continue",
bearLeft: "Incline à esquerda",
bearRight: "Incline à direita",
turnLeft: "Vire à esquerda",
turnRight: "Vire à direita",
sharpLeft: "Curva acentuada à esquerda",
sharpRight: "Curva acentuada à direita",
turn: "Vire",
keepLeft: "Mantenha-se à esquerda",
keepRight: "Mantenha-se à direita",
takeFork: "Pegue a bifurcação",
merge: "Entre na via",
roundabout: "Pegue a rotatória",
takeRamp: "Pegue o acesso",
takeExit: "Pegue a saída",
},
maneuverOnto: "{{instruction}} na {{road}}",
},
sasquatchUi: {
live: "ao vivo",
offline: "offline",
genericTitle: "Assistente SkateSpots 🦧",
genericGreeting: "E aí! Sou o The Sasquatch. Pergunte qualquer coisa sobre spots, eventos, coaches, equipamentos, ou como o app funciona. Tenho dados ao vivo do relay do SkateSpots!",
q1: "Planeje 3 dias em Lisboa",
q2: "Encontre spots perto de mim",
q3: "Algum evento chegando?",
q4: "O que são crews?",
q5: "Como funcionam os zaps?",
q6: "O que é Nostr?",
q7: "O que é Meu Stash?",
q8: "Isso é gratuito?",
bubbleTitle: "Pressione e arraste para mover · Toque para abrir",
openGuideAria: "Abrir o guia do Sasquatch",
hideAria: "Ocultar o assistente Sasquatch",
hide: "Ocultar assistente",
showAria: "Mostrar o assistente Sasquatch",
activeUntil: "Ativo até {{date}}",
platformOwner: "Dono da plataforma",
upgradeTitle: "Faça upgrade para o Sasquatch Pro",
goPro: "Seja Pro",
goProBlurb: "IA pessoal · a partir de 2k sats",
aiBalanceTitle: "Saldo de créditos do Sasquatch AI (somente dono) — recarregue em {{provider}}",
aiChip: "⚡ IA {{balance}}",
minimizeToBubbleAria: "Minimizar para o balão",
minimize: "Minimizar",
closePanelAria: "Fechar painel",
close: "Fechar",
askLab: "Pergunte sobre Coaching e Filmagem",
askMap: "Pergunte sobre Spots, Lojas e Equipamentos",
askAnything: "Pergunte qualquer coisa 🛹",
quickQuestions: "Perguntas rápidas:",
you: "🧑 Você",
thinking: "pensando...",
inputPlaceholder: "Pergunte sobre spots, eventos, coaches...",
liveDataFrom: "Dados ao vivo de",
nostrRelays: "relays Nostr",
clear: "limpar",
gettingLocation: "📍 Obtendo sua localização…",
findingClosest: "🔍 Encontrando os spots mais próximos…",
checkingLive: "🔍 Verificando dados ao vivo…",
planningTrip: "🗺️ Planejando sua viagem a {{destination}}...",
searchingRelays: "🔍 Buscando nos relays por {{tool}}...",
perk1: "Assistente pessoal — o Sasquatch lê seu próprio Stash, crews, spots e anúncios",
perk2: "Rascunhos de ações: anunciar equipamentos, postar um status de skate, planejar uma viagem — você confirma antes de publicar qualquer coisa",
perk3: "As respostas usam seu contexto pessoal, não apenas dados públicos",
perk4: "⚡ Apoie diretamente o SkateSpots e o mantenha gratuito e sem anúncios",
welcomeTitle: "Obrigado por apoiar o Sasquatch Pro! 🦧⚡",
welcomeDesc: "Pagamento enviado — seu passe ativa quando o provedor confirmar (normalmente em um minuto). Obrigado por manter as ruas livres.",
invoiceCopied: "Fatura copiada",
dialogDesc: "Potencialize seu guia de skate com IA. 100% financia um app comunitário gratuito e sem anúncios.",
proSupporter: "Você é um apoiador Pro ⚡",
extendPrompt: "Quer estender? Escolha um plano abaixo para adicionar mais tempo.",
scanToPayPre: "Escaneie para pagar",
scanToPayAmount: "{{sats}} sats",
scanToPayPost: "por {{label}} de Pro",
invoiceQrAlt: "QR da fatura Lightning",
copyInvoice: "Copiar fatura",
ivePaid: "Já paguei",
ivePaidHint: "Toque em \"Já paguei\" depois que sua carteira confirmar — isso registra seu passe na sua identidade Nostr.",
freeStaysPre: "O Sasquatch grátis continua grátis — busca pública de spots/eventos/coaches, planejamento de viagens + o glossário completo de tricks. O Pro adiciona a camada ",
freeStaysEmphasis: "pessoal + de ações",
freeStaysPost: ".",
loginFirst: "Faça login primeiro para fazer upgrade.",
paysTo: "Paga para",
overLightning: "via Lightning. Vinculado ao seu npub.",
popular: "Popular",
sats: "sats",
extend: "Estender",
done: "Pronto!",
cancelledNothing: "Cancelado — nada foi publicado.",
draftReview: "Rascunho — revise e confirme",
statusTextPlaceholder: "Texto do status",
titlePlaceholder: "Título",
priceSatsPlaceholder: "Preço (sats)",
conditionPlaceholder: "Condição",
cancel: "Cancelar",
aiTitle: "Sasquatch AI",
owner: "Dono",
notConfigured: "não configurado",
unavailable: "indisponível",
satsValue: "{{balance}} sats",
theNode: "o nó",
lowBalance: "Acabando — recarregue em {{provider}} ou a IA vai usar o provedor sem chave.",
aiDesc: "IA paga por requisição, financiada em sats via Routstr. Recarrega quando está baixo.",
tier7d: "7 dias",
tier1m: "1 mês",
tier3m: "3 meses",
tier1y: "1 ano",
badgeTry: "Experimente",
badgeOff20: "20% off",
badgeBest: "Melhor custo-benefício · 40% off",
draftPostStatusTitle: "Postar um status de skate",
draftAutoExpires: "Expira automaticamente em {{count}} min",
draftPostStatusCta: "Postar status",
draftCategory: "Categoria: {{value}}",
draftSize: "Tamanho: {{value}}",
draftCondition: "Condição: {{value}}",
draftMaxPrice: "Preço máx.: {{price}} {{currency}}",
draftPriceOpen: "Preço: em aberto",
draftLookingForTitle: "Procurando \"{{title}}\"",
draftWantedCta: "Postar anúncio de procura",
draftPrice: "Preço: {{price}} {{currency}}",
draftPriceOffer: "Preço: aceito ofertas",
draftListTitle: "Anunciar \"{{title}}\" para venda",
draftPublishCta: "Publicar anúncio",
statusPosted: "Status postado 🛹",
wantedPublished: "Anúncio de procura publicado 🔎",
listingPublished: "Anúncio publicado 💸",
mustBeLoggedIn: "Você precisa estar logado.",
},
sasquatchChat: {
faq: {
hi: "E aí! Sou o The Sasquatch 🦧 Seu guia de skate com IA. Pergunte sobre spots, eventos, coaches, equipamentos — ou qualquer coisa sobre o app. Do que você precisa?",
hello: "E aí! 🛹 Sou o The Sasquatch. Pergunte sobre spots de skate, eventos, coaches, ou como o app funciona. Qual é a boa?",
hey: "E aí, skatista! 🤙 Pergunte sobre spots perto de você, eventos chegando, coaches, ou qualquer coisa do SkateSpots.",
whoAreYou: "Sou o The Sasquatch 🦧 — o guia de IA do SkateSpots. Consigo encontrar spots de skate no mundo todo, procurar eventos, coaches, filmers e anúncios de equipamentos. Tudo com dados ao vivo do Nostr. Manda ver!",
whatCanYouDo: "Consigo encontrar spots de skate por cidade ou país, procurar eventos chegando, encontrar coaches e filmers no The Lab, buscar anúncios de equipamentos e responder perguntas sobre como o app funciona. Tente: 'spots em Bangkok' ou 'encontre um coach'! 🛹",
whatIsNostr: "Nostr é um protocolo simples e aberto para redes sociais descentralizadas. Pense no Twitter, mas sem uma única empresa controlando — você usa chaves criptográficas em vez de nomes de usuário, escolhe quais relays guardam seus dados (ou roda os seus), e uma conta funciona em todo app Nostr! 🔑",
isThisPrivate: "Aqui vai a real 🛡️\n\n• Sua **localização de GPS fica no seu dispositivo** — o 'Perto de mim' só centraliza o mapa. Nunca é enviada para nós nem publicada.\n• **Spots que você adiciona são públicos** (esse é o ponto de um mapa compartilhado) — então não coloque um pino na porta da sua casa.\n• **DMs e chats de crew são criptografados de ponta a ponta** — só os membros conseguem ler.\n• Como qualquer site, os servidores que você acessa (tiles do mapa, relays) podem ver seu **IP**. Quer esconder isso também? Use uma VPN ou Tor.\n\nDetalhes completos na [Privacy page](/privacy). 🛹",
privacy: "Versão rápida 🛡️: seu GPS nunca sai do seu dispositivo, os spots que você publica são públicos por design, e DMs/chats de crew são criptografados de ponta a ponta. Os servidores ainda podem ver seu IP (normal em qualquer site) — uma VPN ou Tor esconde isso se você quiser. Análise completa na [Privacy page](/privacy).",
amITracked: "O SkateSpots não te rastreia — sem anúncios, sem perfilamento por analytics, sem venda de dados, e não há um servidor SkateSpots coletando sua localização. Seu GPS fica no seu dispositivo. A única coisa que os servidores veem (tiles do mapa, relays) é seu **IP** — igual a qualquer site. Use uma VPN ou Tor para esconder isso. Mais na [Privacy page](/privacy). 🛡️",
doYouTrack: "Não — sem rastreamento, sem anúncios, sem coleta de dados. Seu GPS fica no seu dispositivo e não há servidor central te registrando. Os servidores que você acessa podem ver seu IP (como qualquer site); uma VPN/Tor esconde isso. Veja a [Privacy page](/privacy). 🛹",
vpn: "Totalmente opcional, mas ótimo se você quer privacidade extra 🛡️. Uma VPN esconde seu **IP** (localização aproximada) dos servidores com quem o SkateSpots fala — tiles do mapa, relays, etc. Escolha um provedor sem logs em que você confie (ex.: Mullvad); evite os grátis duvidosos.\n\nAviso: uma VPN **não** esconde os spots que você publica (eles são públicos), e não ligue o GPS do navegador se está tentando ficar anônimo. Detalhes completos na [Privacy page](/privacy).",
tor: "O Tor Browser te dá a privacidade de IP mais forte — ele te roteia por vários relays para que os servidores não vejam seu IP real 🧅. Custo: é mais lento, e mapas + alguns relays Nostr podem travar ou bloquear saídas Tor. Ótimo para os mais cautelosos.\n\nLembre-se: o Tor esconde seu IP, não os spots que você publica, e não ative o GPS do navegador se o objetivo é anonimato. Mais na [Privacy page](/privacy).",
hideMyIp: "Duas opções gratuitas 🛡️: uma **VPN confiável** (fácil, rápida — esconde seu IP atrás dos servidores dela) ou o **Tor Browser** (privacidade máxima, mais lento). Qualquer uma impede que os servidores que o SkateSpots acessa vejam seu IP real. Obs.: elas não escondem os spots que você publica. Veja a [Privacy page](/privacy).",
isMyLocation: "Sua localização está segura 📍 — o 'Perto de mim' lê seu GPS só no seu dispositivo, para centralizar o mapa e ordenar spots próximos. Nunca é publicada no Nostr, nunca é enviada para nós, nunca é compartilhada. Só os spots que você adiciona de propósito são públicos. Detalhes na [Privacy page](/privacy).",
whatAreZaps: "Zaps são gorjetas instantâneas de Bitcoin via Lightning enviadas pelo Nostr! Clique no ⚡ em qualquer conteúdo e envie sats direto para a carteira do criador. Como dar 'like' mas com dinheiro de verdade. Instantâneo, ponto a ponto, sem intermediários. ⚡",
howToLogin: "Dois jeitos:\n1. **Extensão de navegador** (Desktop): instale Alby ou nos2x, depois clique em 'Entrar'\n2. **Novo usuário**: clique em 'Cadastre-se' para gerar chaves. Baixe seu nsec (chave secreta) e SALVE — esta é sua conta para sempre!",
whatIsCashu: "Carteira Bitcoin integrada! Tokens de ecash Cashu respaldados por Lightning — funciona offline nos spots, focada em privacidade (as mints não conseguem rastrear pagamentos). Vá em Carteira nas Configurações para usar. 🥜",
whatIsNwc: "Nostr Wallet Connect — tipo um USB-C para carteiras Lightning. Conecte Alby, Minibits, Zeus ou Coinos uma vez e dê zap com um clique para sempre. Criptografado, você controla os limites de gasto. 🔌⚡",
isItFree: "100% gratuito. Sem anúncios, sem assinaturas, sem enrolação corporativa. Feito por skatistas para skatistas. Financiado pela comunidade via Angor — confira a página de Apoiadores. Você também pode ganhar Bitcoin com zaps da comunidade por contribuir com spots de qualidade. 🛹",
whatCanIDo: "Descubra spots no mundo todo no mapa, contrate profissionais no The Lab (coaches, filmers, fotógrafos, editores, builders de rampa), ande com uma crew, participe de eventos, faça tours, compre/venda equipamentos, acompanhe seu Stash privado, dê zap em criadores, confira o clima dos spots e construa a comunidade de skate descentralizada!",
whatIsTheLab: "O The Lab é onde você contrata profissionais da cena do skate: Coaches, Filmers, Fotógrafos, Editores de Vídeo e Builders de rampa/park/DIY. Cada um pode ser uma pessoa solo ou um coletivo (crew/estúdio) — os membros confirmam com suas próprias chaves, então é legítimo. Tudo no Nostr, sem contas falsas. 🎓",
whatIsACrew: "Crews são sua família do skate ancorada no mapa — com quem você anda, não quem você contrata. Cada crew tem território no mapa (pinos verdes), spots da casa, membros, vibes e um manifesto. Os membros confirmam com a própria chave. Crie uma em Crews → 'Criar crew'. 🤘",
whatAreCrews: "Crews são sua família do skate ancorada no mapa — com quem você anda, não quem você contrata. Cada crew tem território no mapa (pinos verdes), spots da casa, membros e um manifesto. Os membros confirmam com a própria chave. Vá até a aba Crews para começar ou entrar em uma! 🤘",
howToStartACrew: "Vá até a aba Crews → 'Criar crew'. Dê um nome, coloque seu território no mapa, adicione vibes (ou sua própria #hashtag), vincule seus spots da casa e adicione membros por npub. Cada membro confirma com a própria chave, então o elenco é legítimo. 🤘",
whatIsMyStash: "Meu Stash é seu armário de equipamentos PRIVADO e criptografado (criptografia NIP-44). Acompanhe seus decks, trucks, wheels, tênis — com local de armazenamento, condição, raridade e preço. Só VOCÊ consegue ler, a menos que marque itens como públicos. Ótimo para seguro ou para planejar uma troca. 🎒",
whatIsStash: "Meu Stash é seu inventário de equipamentos PRIVADO e criptografado. Registre tudo o que você tem — condição, onde está guardado, valor — tudo criptografado para que só você veja. Marque itens como públicos se quiser vender ou mostrar. 🎒",
whatIsABuilder: "Builders são crews de rampa/park/DIY no The Lab que você pode contratar para construir transições, bowls, rails ou um park inteiro. Eles listam o que constroem, materiais, escala do projeto, e podem ter licença/seguro. Muitas vezes coletivos — e podem vincular os spots que construíram ao mapa. 🏗️",
whatIsANutzap: "Nutzaps (NIP-61) são gorjetas de ecash enviadas pelo Nostr — tokens Cashu privados enviados direto para alguém. Você pode configurar o RECEBIMENTO de nutzaps na Carteira. (Enviar nutzaps completos está chegando — por enquanto, use zaps Lightning.) 🥜⚡",
whatIsClink: "CLINK é um código de pagamento nativo do Nostr (um 'noffer'). Lojas, crews e profissionais do Lab podem adicionar um para que você possa pagá-los sem precisar de um endereço Lightning — você verá um botão 'Pagar via CLINK' com um QR. Escaneie com uma carteira CLINK como a ShockWallet. 🔗⚡ [specs](https://clinkme.dev/specs.html) [apps](https://clinkme.dev/apps.html)",
whatIsNoffer: "Um noffer é um código de pagamento CLINK — uma forma reutilizável e nativa do Nostr de receber pagamentos sem servidor web nem endereço Lightning. Adicione o seu no perfil da sua loja/crew/Lab e as pessoas podem te pagar direto. 🔗",
whatAreTours: "Tours são viagens de skate guiadas — sessões locais, road trips nacionais ou tours de destruição mundial. Encontre no mapa ou na seção Tours, encontre a galera e ande em terreno novo com os locais. 🗺️🛹",
whatIsAShop: "Skate Shops são lojas locais listadas no mapa. Descubra e apoie skate shops de verdade (físicas ou online) na sua área — algumas até aceitam Bitcoin. 🏪",
howToSellGear: "Vá em Troca de Equipamentos / Marketplace e crie um anúncio (NIP-99). Adicione fotos, preço em sats, condição, e opcionalmente vincule a um spot para aparecer no mapa. Os compradores te dão zap ou mandam mensagem direto. 🛹💸",
supporters: "O SkateSpots é financiado pela comunidade via Angor (financiamento coletivo descentralizado em Bitcoin) — sem anúncios, sem investidores, sem venda de dados. Confira a página de Apoiadores para apoiar o projeto e manter as ruas livres. ❤️⚡",
trustScore: "Pontuações de confiança (0-100) fornecidas pelo Relatr. Analisa sua rede Nostr: seguidores, atividade, engajamento, zaps. Mais alto = mais confiável. Ajuda a filtrar bots e spam. Confira qualquer perfil para ver a pontuação. 🛡️",
whatRelay: "O SkateSpots usa: 🛹 relay.skate-spots.org (principal, na lista de permitidos pela qualidade) + relay.ditto.pub (global) + purplepag.es (agregador de perfis). Seus dados são replicados em todos eles para redundância.",
tripPlanner: "Me diga uma cidade e eu monto uma viagem de skate dia a dia 🗺️ — spots, eventos, coaches e crews locais, atenta ao clima (dia de chuva = dica de crew para spots cobertos). Tente 'planeje 3 dias em Lisboa'. Consigo salvar tudo numa Coleção e te encaminhar para voos/hospedagem nos sites reais (sem KYC, sem intermediário). 🛹",
planATrip: "Só diga 'planeje 3 dias em Barcelona' (ou qualquer cidade) e eu monto spots, sessões, coaches e crews locais para cada dia. Salve como uma Coleção e vai andar. 🗺️🛹",
sasquatchPro: "**Sasquatch Pro** 🦧⚡ é um passe de apoiador via Lightning que desbloqueia meu lado pessoal:\n\n• 🧠 **Assistente pessoal** — eu leio seu próprio Stash, crews, spots e anúncios\n• ✨ **Rascunhos de ações** — anunciar equipamentos, postar seu status de skate, planejar viagens (você sempre confirma antes de publicar)\n• 💬 **Contexto pessoal** — minhas respostas usam seus próprios dados, não só resultados públicos\n• ⚡ **Apoie o projeto** — você mantém o SkateSpots gratuito e sem anúncios\n\nO Sasquatch grátis continua grátis: busca pública de spots/eventos/coaches/crews, o glossário e o planejamento de viagens funcionam sem o Pro. O Pro só adiciona o lado *pessoal*. Toque em **⚡ Seja Pro** lá em cima. Planos: 7 dias ~2k sats, 1 mês ~5k, 3 meses ~12k, 1 ano ~36k.",
proPerks: "Vantagens do Pro 🦧⚡: assistente pessoal (lê seu Stash/crews/spots/anúncios), rascunhos de ações (anunciar equipamentos, postar status, planejar viagens — você confirma) e respostas que usam seu próprio contexto pessoal. Além disso, você apoia diretamente o SkateSpots e o mantém gratuito + sem anúncios. O grátis continua grátis — o Pro adiciona a camada pessoal. Toque em **⚡ Seja Pro** lá em cima.",
proVersion: "A versão Pro de mim 🦧⚡ adiciona um **assistente pessoal**: consigo ler seu próprio Stash, crews, spots e anúncios, rascunhar ações para você (anunciar equipamentos, postar um status, planejar uma viagem — você sempre confirma primeiro) e usar seu contexto pessoal nas respostas. Também apoia diretamente o projeto. O Sasquatch grátis (busca de spots/eventos/coaches/crews, glossário, planejador de viagens) continua grátis. Toque em **⚡ Seja Pro** lá em cima.",
perks: "Vantagens do Pro 🦧⚡: assistente pessoal (seu Stash/crews/spots/anúncios), rascunhos de ações que você confirma e respostas que usam seu próprio contexto — além de manter o app gratuito e sem anúncios. Toque em **⚡ Seja Pro** lá em cima.",
goPro: "Toque no botão **⚡ Seja Pro** lá em cima para abrir a tela de upgrade. O Pro desbloqueia meu assistente pessoal (Stash/crews/spots/anúncios) e rascunhos de ações, e apoia diretamente o projeto. Pague com Lightning — 7 dias ~2k sats até 1 ano ~36k sats. Os recursos grátis continuam grátis. 🦧",
proPricing: "Planos Pro (pague com Lightning ⚡): **7 dias** ~2.000 sats (~$1,20), **1 mês** ~5.000 sats (~$3), **3 meses** ~12.000 sats (~$7, 20% off), **1 ano** ~36.000 sats (~$21, melhor custo-benefício). Toque em **⚡ Seja Pro** lá em cima.",
howMuchIsPro: "Planos Pro: 7 dias ~2.000 sats, 1 mês ~5.000 sats, 3 meses ~12.000 sats (20% off), 1 ano ~36.000 sats (melhor custo-benefício). Pague com Lightning ⚡. Toque em **⚡ Seja Pro** lá em cima.",
upgrade: "Para fazer upgrade para o Sasquatch Pro, toque no botão **⚡ Seja Pro** lá em cima. Pague com Lightning (7 dias ~2k sats até 1 ano ~36k). O Pro desbloqueia meu assistente pessoal e rascunhos de ações, e apoia diretamente o projeto. 🦧⚡",
},
statsTitle: "📊 **SkateSpots em números**",
weatherTemp: "• {{temp}}°C (sensação {{feels}}°C)",
weatherSkateability: "• Skateabilidade: **{{label}}** ({{score}}/100)",
weatherError: "Não consegui ler o clima agora. Tente de novo em um segundo. 🌧️",
labelSpots: "spots",
labelEvents: "eventos",
labelLabPros: "pros do Lab",
labelCrews: "crews",
labelShops: "skate shops",
labelTours: "tours",
labelGear: "anúncios de equipamentos",
unnamed: "Sem nome",
emptyWhere: " em **{{place}}**",
emptyResult: "Não encontrei nenhum {{label}}{{where}} agora 🦧\n\nIsso pode significar que ainda não há nenhum listado — ou que os relays demoraram a responder. Tente novamente em um instante, confira a grafia, ou [add the first one on the map](https://skate-spots.org/map). 🛹",
foundTitle: "{{emoji}} Encontrei **{{count}}** {{label}}:\n{{lines}}{{more}}",
moreResults: "\n\n…e mais **{{count}}** — [see them all on the map](https://skate-spots.org/map) 🗺️",
locationDenied: "Não consigo ver sua localização — nada sai do seu dispositivo; eu só leio localmente quando você pede, e o navegador acabou de recusar. Toque em 🎯 **Perto de mim** no mapa, ou me diga uma cidade: \"spots em Bangkok\". 🛹",
noNearbySpots: "Nenhum spot mapeado perto de você ainda 🦧 — [be the first to drop one](https://skate-spots.org/create-spot). 🛹",
closestTitle: "Mais perto de você agora:",
closestFooter: "_Calculado no seu dispositivo — sua localização nunca saiu dele._",
proNudge: "Isso é coisa do **Sasquatch Pro** 🦧⚡ — com o Pro consigo ler seu Stash, crews, spots e anúncios, rascunhar anúncios de equipamentos, anúncios de procura e status de skate, e planejar suas viagens. É um passe de apoiador via Lightning que mantém o SkateSpots gratuito e sem anúncios. Toque no botão **⚡ Seja Pro** lá em cima para desbloquear. 🛹",
draftingProPerk: "Rascunhar ações (postar um status, anunciar equipamentos) é uma vantagem do **Sasquatch Pro** 🦧⚡ — toque em **⚡ Seja Pro** lá em cima para desbloquear.",
draftIntro: "Aqui está um rascunho — revise e toque para publicar. Nada vai ao ar até você confirmar. 🛹",
draftFailed: "Não consegui montar esse rascunho — tente me contar os detalhes de novo (ex.: \"anuncie minhas wheels Spitfire por 8000 sats\").",
tripAskCity: "Para onde? Me diga uma cidade (ex.: \"planeje 3 dias em Lisboa\") e eu monto uma viagem. 🗺️",
tripEmptyMap: "Nada no mapa para **{{destination}}** ainda 🦧 — seja o primeiro a colocar spots em [skate-spots.org](https://skate-spots.org). Quando os locais adicionarem spots, crews e eventos, eu monto uma viagem completa para você.",
tripLocked: "Fechei uma missão em **{{destination}}** para você 🛹 — spots, sessões e locais abaixo. Ajuste ou salve.",
tripFailed: "Não consegui acessar os dados ao vivo para planejar isso agora. Tente novamente em um instante! 🛹",
tripEmptyMapLocal: "Nada no mapa para **{{destination}}** ainda 🦧 — seja o primeiro em [skate-spots.org](https://skate-spots.org).",
tripMissionLocal: "Aqui está uma missão em **{{destination}}** 🛹 — spots, sessões e locais abaixo.",
relayFailed: "Os relays não responderam a tempo agora 🛰️ — isso geralmente é uma conexão lenta, não um spot faltando. Tente de novo em um instante. 🛹",
couldNotProcess: "Hum, não consegui processar isso. Tente reformular!",
freeTierFallback: "Essa aí precisa de raciocínio de IA — um recurso do **Sasquatch Pro** ⚡🦧\n\nAinda consigo encontrar **spots, eventos, coaches, crews, lojas, tours e equipamentos** direto dos relays — me pergunte, por ex., \"spots em Barcelona\" — e o [Glossary](/glossary) cobre mais de 150 tricks e termos. Toque em **⚡ Seja Pro** lá em cima para desbloquear respostas de IA.",
aiDownFallback: "Meu cérebro de IA está pegando um ar agora 🦧 — mas ainda te ajudo:\n\n• 🗺️ [Map](/) — spots, lojas e eventos perto de você\n• 🧪 [The Lab](/lab) — coaches, filmers, editores\n• 📖 [Glossary](/glossary) — mais de 150 tricks e termos\n• 👥 [Crews](/crews) — encontre sua galera\n\nOu só me diga uma **cidade** (\"spots em Barcelona\") ou uma **trick** (\"o que é um nollie\") que eu respondo direto. 🛹",
wentWrong: "Algo deu errado do meu lado. Tente de novo em um segundo! 🦧",
publishError: "Não foi possível publicar isso: {{error}}. Tente novamente em um instante.",
unknownError: "erro desconhecido",
},
};
export default ptBatch2;