245 keys had accumulated in en/es only (trustUi, labOptions, cordnUi, socialUi, walletUi, marketTerms, …), leaving every other locale at 97%. Backfilled 245x20 = 4,900 strings into src/i18n/<lang>/drift.ts and merged them through a new shared src/i18n/deepMerge.ts — a shallow ...drift spread would clobber existing namespaces, so index.ts deep-merges instead. Verified: check-i18n all 20 at 100%, tsc + eslint clean.
321 lines
16 KiB
TypeScript
321 lines
16 KiB
TypeScript
/**
|
|
* it — translation drift fragment. Keys added after the main batches
|
|
* (language picker search, trust, marketplace guidelines, clothing craft,
|
|
* weather additions, Cordn MLS chat). Composed LAST in `index.ts` via a deep
|
|
* merge so these nested keys complement — never replace — the batch namespaces.
|
|
*/
|
|
const drift = {
|
|
nav: {
|
|
searchLanguages: "Cerca lingue…",
|
|
noLanguages: "Nessuna lingua trovata",
|
|
},
|
|
mapPage: {
|
|
searchSuggestPlaces: "Luoghi",
|
|
},
|
|
mapUi: {
|
|
firstRunTitle: "Inizia",
|
|
firstRunAddSpot: "Aggiungi il tuo primo spot",
|
|
firstRunJoinCrew: "Unisciti a una crew",
|
|
firstRunStartCrew: "Avvia la tua crew",
|
|
firstRunWallet: "Configura il tuo wallet",
|
|
forecastDays: "Previsioni a {{count}} giorni",
|
|
},
|
|
spotUi: {
|
|
forecastDays: "Previsioni a {{count}} giorni",
|
|
},
|
|
marketUi: {
|
|
trades: {
|
|
stateRevoked: "revocato",
|
|
stateVerifying: "verifica",
|
|
},
|
|
loadFailed: "Impossibile raggiungere i relay. Controlla la connessione e riprova.",
|
|
statusPending: "in sospeso",
|
|
offers: {
|
|
closeDeal: "Chiudi l'accordo",
|
|
loadFailed: "Impossibile caricare le offerte. Controlla la connessione e riprova.",
|
|
},
|
|
pay: {
|
|
nonSats: "Questa offerta è prezzata in {{currency}}. Il pagamento in-app è solo in sats. Regola direttamente con il venditore.",
|
|
unsupported: "Questo codice di pagamento (una richiesta Cashu) non è ancora supportato. Chiedi al venditore una fattura o un indirizzo Lightning.",
|
|
},
|
|
escrowRequest: {
|
|
lockedNotSent: "I fondi sono bloccati in escrow e salvati su questo dispositivo, ma la richiesta non è stata inviata. Riapri l'annuncio per riprovare. Non pagare di nuovo.",
|
|
mintLabel: "Mint (dove sono bloccati i fondi)",
|
|
sellerMintHint: "Il venditore preferisce questo mint; i fondi bloccati qui sono i più facili da riscattare per lui.",
|
|
mintHint: "L'escrow risiede in questo mint. Il venditore riscatta qui, quindi scegline uno di cui vi fidate entrambi.",
|
|
noMints: "Nessun mint disponibile",
|
|
p2pkUnsupported: "Questo mint non dichiara il supporto P2PK (NUT-11), quindi l'escrow non può essere bloccato qui. Scegli un altro mint.",
|
|
},
|
|
},
|
|
labUi: {
|
|
offerClothing: "Offri abbigliamento",
|
|
tabClothing: "Abbigliamento",
|
|
empty: {
|
|
clothingTitle: "Ancora nessun designer di abbigliamento",
|
|
clothingBody: "Sii il primo a offrire abbigliamento personalizzato, kit di squadra e apparel per la scena.",
|
|
},
|
|
craftFields: {
|
|
sizing: "Gamma di taglie",
|
|
samples: "Campioni / prototipi",
|
|
customization: "Personalizzazione",
|
|
},
|
|
},
|
|
socialUi: {
|
|
coordinator: {
|
|
ourDefaultTitle: "Coordinatore SkateSpots",
|
|
ourDefaultDesc: "SkateSpots gestisce un coordinatore su relay.skate-spots.org. Usalo per impostazione predefinita, oppure gestisci il tuo — un coordinatore vede solo testo cifrato e metadati, mai i tuoi messaggi.",
|
|
useOurs: "Usa il coordinatore SkateSpots",
|
|
},
|
|
crewCoordinator: {
|
|
encryptedChat: "Chat crittografata",
|
|
privateChatName: "Chat privata",
|
|
privateChatDesc: "Chat di gruppo con forward secrecy (MLS) tramite un coordinatore.",
|
|
privateChatDescFull: "La chat privata viene creata una volta da un admin, poi i membri si uniscono.",
|
|
chatRowDesc: "Tutti nella crew — sigillato con la chiave di ogni membro (NIP-17).",
|
|
openChat: "Apri",
|
|
setUpChat: "Configura",
|
|
joinChat: "Unisciti",
|
|
checking: "Verifica…",
|
|
openInAnotherApp: "Apri in un'altra app",
|
|
openInCordnWeb: "Cordn (web)",
|
|
openCordnGroup: "Apri la chat della crew",
|
|
copyForStaircase: "Copia per Staircase",
|
|
},
|
|
dms: {
|
|
refresh: "Aggiorna",
|
|
crews: "Crew",
|
|
crewFounder: "Fondatore",
|
|
crewMember: "Membro",
|
|
crewOpen: "Apri",
|
|
crewSetUp: "Configura",
|
|
},
|
|
form: {
|
|
cordnGroup: "Gruppo Cordn",
|
|
cordnGroupHint: "Opzionale: incolla il link del gruppo da Staircase o Cordn web. La tua crew ottiene così una vera chat MLS end-to-end, ospitata sul nostro coordinatore.",
|
|
},
|
|
},
|
|
settingsUi: {
|
|
settingsPage: {
|
|
trust: "Fiducia",
|
|
trustSub: "Fonti e visualizzazione",
|
|
},
|
|
},
|
|
walletUi: {
|
|
trust: {
|
|
mute: "Silenzia",
|
|
muted: "Silenziato",
|
|
mutedDesc: "Non vedrai i suoi contenuti.",
|
|
muteFailed: "Impossibile silenziare. Riprova.",
|
|
loginToMute: "Accedi per silenziare.",
|
|
attributedNetwork: "Da persone nella tua rete",
|
|
attributedProviderHouse: "Dal provider di fiducia della community",
|
|
attributedProviderCustom: "Dal provider che hai scelto",
|
|
howItWorks: "Come funziona la fiducia",
|
|
flaggedNoticeTitle: "Segnalato da skater affidabili",
|
|
flaggedNoticeDesc: "Fai attenzione. Persone affidabili della rete hanno segnalato questo account.",
|
|
flaggedReporterFollow: "{{count}} che segui",
|
|
flaggedReporterNetwork: "{{count}} nella tua rete",
|
|
flaggedReporterOther: "{{count}} altri account",
|
|
flaggedReport: "Segnala",
|
|
flaggedDismiss: "Ignora",
|
|
bucketVerified: "Verificato",
|
|
bucketUnknown: "Sconosciuto",
|
|
bucketFlagged: "Segnalato",
|
|
bucketVerifiedDesc: "Qualcuno nella tua rete garantisce per questo account.",
|
|
bucketUnknownDesc: "Nessuno nella tua rete ha ancora garantito per questo account.",
|
|
bucketFlaggedDesc: "Persone affidabili hanno segnalato questo account.",
|
|
reportedByTrusted: "Segnalato da {{count}} persone affidabili",
|
|
},
|
|
},
|
|
trustUi: {
|
|
alertsTitle: "Avvisi di rete",
|
|
alertsDesc: "Account che segui e che persone affidabili hanno segnalato o silenziato.",
|
|
alertsEmpty: "Nessun avviso. Controlliamo gli account che segui per segnalazioni affidabili.",
|
|
alertsReported: "Segnalato da {{count}} persone affidabili",
|
|
alertsMuted: "Silenziato da {{count}} persone affidabili",
|
|
alertsIgnore: "Ignora",
|
|
alertsUnfollow: "Smetti di seguire",
|
|
alertsLogin: "Accedi per vedere gli avvisi sugli account che segui.",
|
|
providerTitle: "Provider",
|
|
providerDesc: "I punteggi provengono da un provider che scegli tu. Il provider della community è quello predefinito.",
|
|
useCommunity: "Usa il provider della community",
|
|
setProvider: "Imposta un provider",
|
|
customPubkeyPlaceholder: "npub o pubkey esadecimale del provider",
|
|
customRelayPlaceholder: "wss://relay.esempio.com",
|
|
invalidProvider: "Inserisci un npub valido o una pubkey esadecimale di 64 caratteri, e un relay wss://.",
|
|
publishFailed: "Impossibile pubblicare il provider. Riprova.",
|
|
providerSaved: "Provider aggiornato.",
|
|
loggedOutProvider: "Accedi per scegliere un provider.",
|
|
showMarks: "Mostra i contrassegni di fiducia",
|
|
showMarksDesc: "Contrassegni verificati e sconosciuti. Le segnalazioni vengono sempre mostrate.",
|
|
sourceLabel: "Fonte",
|
|
sourceHouse: "Provider di fiducia della community",
|
|
sourceCustom: "Il tuo provider",
|
|
loggedOut: "Accedi per scegliere il tuo provider di fiducia.",
|
|
seoTitle: "Come funziona la fiducia",
|
|
seoDescription: "Come SkateSpots mostra la fiducia: tre stati, da dove provengono i punteggi e perché l'assenza non è diffidenza.",
|
|
title: "Come funziona la fiducia",
|
|
intro: "Qui la fiducia è un segnale, non un verdetto. Deriva da chi conosci, o da un provider che scegli. Non classifichiamo le persone a livello globale.",
|
|
statesTitle: "Tre stati",
|
|
verifiedTitle: "Verificato",
|
|
verifiedDesc: "Qualcuno nella tua rete garantisce per questo account: un amico di un amico, o il provider che hai scelto.",
|
|
unknownTitle: "Sconosciuto",
|
|
unknownDesc: "Nessuno ha ancora garantito. È qui che inizia ogni nuovo account.",
|
|
flaggedTitle: "Segnalato",
|
|
flaggedDesc: "Persone affidabili hanno segnalato questo account. È un avviso a guardare più da vicino, non una prova.",
|
|
absenceTitle: "Nessun badge non è diffidenza",
|
|
absenceDesc: "La maggior parte degli account non mostra nulla. Significa che nessuno nella tua rete ha ancora garantito, non che qualcosa non va. Non leggere mai un contrassegno mancante come negativo.",
|
|
sourceTitle: "Chi lo calcola",
|
|
sourceDesc: "Per impostazione predefinita usiamo la tua rete. Puoi anche scegliere un provider di fiducia che pubblica punteggi firmati su Nostr (NIP-85), o disattivare la visualizzazione. Le segnalazioni vengono sempre mostrate, perché sono un segnale di sicurezza.",
|
|
endorsementTitle: "La presenza non è un'approvazione",
|
|
endorsementDesc: "Un contrassegno verificato significa che qualcuno ha garantito, non che la persona sia buona. Una segnalazione significa che persone affidabili l'hanno segnalata, non che sia colpevole. Controlla i dettagli prima di decidere.",
|
|
povTitle: "Dipende dal punto di vista",
|
|
povDesc: "Un punteggio è relativo a chi guarda. Un rank di un provider o di una persona non è confrontabile con un altro, e non ne presentiamo mai uno come fatto oggettivo.",
|
|
settingsCta: "Gestisci nelle impostazioni",
|
|
},
|
|
marketTerms: {
|
|
link: "Linee guida del Marketplace",
|
|
seoTitle: "Linee guida del Marketplace",
|
|
seoDescription: "Come funzionano gli annunci di attrezzatura SkateSpots: peer-to-peer, compratore attento, e le regole.",
|
|
title: "Linee guida del Marketplace",
|
|
intro: "SkateSpots è una bacheca di attrezzatura peer-to-peer. Tratti direttamente con l'altra persona: non custodiamo fondi, non spediamo articoli e non risolviamo controversie.",
|
|
howTitle: "Come funziona",
|
|
howBody: "Pubblica attrezzatura, contatta il venditore in privato e regola direttamente (contanti, Lightning o scambio). Non ci sono carrello né checkout.",
|
|
rulesTitle: "Cosa non è consentito",
|
|
rulesBody: "Niente contenuti illegali, pericolosi o per adulti; niente droghe, armi, contraffazioni o merce rubata. Mantieni gli annunci su attrezzatura da skate e articoli correlati.",
|
|
respectTitle: "Sii rispettoso",
|
|
respectBody: "Niente abusi, molestie, minacce o odio. I moderatori possono nascondere annunci o account.",
|
|
trustTitle: "La fiducia è una guida, non una garanzia",
|
|
trustBody: "I contrassegni di verifica e la reputazione negli scambi sono segnali dalla rete, non promesse. Fai i tuoi controlli prima di scambiare.",
|
|
trustLink: "Come funziona la fiducia",
|
|
privacyLink: "Cosa lascia il tuo dispositivo",
|
|
safetyTitle: "Scambia in sicurezza",
|
|
safetyBody: "Incontratevi in pubblico per le consegne, usa l'escrow o un deposito di buona fede per le spedizioni, e non inviare mai denaro fuori dall'app.",
|
|
moderationTitle: "La moderazione è lieve e reversibile",
|
|
moderationBody: "I contenuti nascosti restano sui relay e possono essere ripristinati; le controversie tra persone spetta a voi risolverle.",
|
|
},
|
|
labOptions: {
|
|
clothing: {
|
|
service: {
|
|
tees: "T-shirt",
|
|
hoodies: "Felpe e maglioni",
|
|
pants: "Pantaloni e shorts",
|
|
jackets: "Giacche e capispalla",
|
|
kits: "Kit di squadra e maglie",
|
|
caps: "Cappellini e berretti",
|
|
socks: "Calzini",
|
|
accessories: "Borse e accessori",
|
|
footwear: "Calzature",
|
|
patches: "Toppe e applicazioni",
|
|
griptape: "Abbigliamento griptape e deck",
|
|
onepiece: "Pezzi unici / upcycled",
|
|
},
|
|
serviceDesc: {
|
|
tees: "T-shirt e top personalizzati",
|
|
hoodies: "Felpe, girocollo e pantaloni della tuta",
|
|
pants: "Pantaloni da lavoro, cargo e shorts",
|
|
jackets: "Giacche da coach, shell e da lavoro",
|
|
kits: "Kit di squadra, maglie e uniformi",
|
|
caps: "Cappellini, berretti e copricapi",
|
|
socks: "Calzini e maglieria",
|
|
accessories: "Borse, cinture e piccola pelletteria",
|
|
footwear: "Scarpe personalizzate",
|
|
patches: "Toppe ricamati e applicazioni",
|
|
griptape: "Arte su griptape e abbigliamento deck",
|
|
onepiece: "Pezzi singoli e capi upcycled",
|
|
},
|
|
method: {
|
|
screenprint: "Serigrafia",
|
|
dtg: "DTG / stampa diretta su tessuto",
|
|
embroidery: "Ricamo",
|
|
cutsew: "Cut & Sew",
|
|
sublimation: "Sublimazione",
|
|
heattransfer: "Trasferimento a caldo / vinile",
|
|
garmentdye: "Tintura in capo",
|
|
knit: "Maglieria",
|
|
patchwork: "Patchwork",
|
|
allover: "Stampa all-over",
|
|
},
|
|
material: {
|
|
cotton: "Cotone",
|
|
heavyweight: "Peso pesante",
|
|
organic: "Biologico / sostenibile",
|
|
fleece: "Pile",
|
|
denim: "Denim",
|
|
canvas: "Canvas",
|
|
nylon: "Nylon / tecnico",
|
|
wool: "Merino / lana",
|
|
leather: "Pelle",
|
|
recycled: "Riciclato / deadstock",
|
|
},
|
|
},
|
|
},
|
|
becomeRolesUi: {
|
|
clothing: {
|
|
seoTitle: "Diventa designer di abbigliamento - SkateSpots",
|
|
seoDescription: "Abbigliamento personalizzato, kit di squadra e apparel per la scena.",
|
|
heading: "Designer di abbigliamento",
|
|
tagline: "Abbigliamento personalizzato, kit di squadra e apparel per la scena",
|
|
noun: "designer di abbigliamento",
|
|
rateLabel: "Tariffa",
|
|
portfolioLabel: "Link shop / portfolio",
|
|
sectionWhatYouMake: "Cosa crei",
|
|
sectionHowYouMake: "Come lo crei",
|
|
sectionMaterials: "Materiali",
|
|
minimumPlaceholder: "es. 10 pezzi",
|
|
turnaroundPlaceholder: "es. 2-3 settimane",
|
|
sizingPlaceholder: "es. XS-3XL / su misura",
|
|
samplesHelper: "Offri campioni o prototipi prima di una produzione completa?",
|
|
customizationPlaceholder: "es. nomi, numeri, grafiche",
|
|
},
|
|
},
|
|
weatherUi: {
|
|
updated: "Aggiornato",
|
|
refresh: "Aggiorna",
|
|
unavailable: "Meteo non disponibile.",
|
|
retry: "Riprova",
|
|
sunrise: "Alba",
|
|
sunset: "Tramonto",
|
|
legendTitle: "Punteggio meteo",
|
|
legendWeatherOnly: "Solo meteo",
|
|
},
|
|
cordnUi: {
|
|
title: "Chat privata",
|
|
subtitle: "Crittografata end-to-end (MLS) tra i membri della crew. Il coordinatore instrada solo testo cifrato e metadati — non vede mai il contenuto dei messaggi.",
|
|
notLoggedIn: "Accedi per usare la chat privata della crew.",
|
|
membersOnly: "Solo i membri della crew possono aprire la chat privata.",
|
|
connecting: "Connessione…",
|
|
noCoordinator: "Nessun coordinatore è ancora configurato per questa crew.",
|
|
noGroupAdmin: "La chat privata di questa crew non è ancora stata creata.",
|
|
noGroupMember: "Non sei ancora nella chat privata di questa crew.",
|
|
create: "Crea la chat privata",
|
|
requestJoin: "Chiedi di unirti",
|
|
checkInvite: "Controlla l'invito",
|
|
requested: "Richiesta inviata — un admin della crew la approverà.",
|
|
noInvite: "Nessun invito in attesa. Chiedi a un admin di approvare la tua richiesta.",
|
|
placeholder: "Scrivi alla crew…",
|
|
send: "Invia",
|
|
refresh: "Aggiorna",
|
|
requests: "Richieste di adesione",
|
|
checkRequests: "Controlla le richieste",
|
|
approve: "Aggiungi",
|
|
noRequests: "Nessuna richiesta di adesione in sospeso.",
|
|
inviteHint: "Per ora sei solo tu in questa chat — i membri della crew possono toccare “Chiedi di unirti”, poi li approvi qui.",
|
|
memberCount: "{{count}} nel gruppo",
|
|
you: "Tu",
|
|
groupRef: "Link del gruppo",
|
|
copyRef: "Copia",
|
|
copied: "Copiato",
|
|
attachImage: "Allega immagine",
|
|
uploading: "Caricamento…",
|
|
uploadFailed: "Impossibile caricare l'immagine.",
|
|
bannerTitle: "Questa crew non ha ancora una chat privata",
|
|
bannerBody: "Configura una chat crittografata end-to-end (MLS) per la tua crew — i membri si uniscono dalla scheda.",
|
|
bannerCta: "Configura",
|
|
ready: "Connesso · MLS",
|
|
errorPrefix: "Impossibile raggiungere il coordinatore",
|
|
interactiveHint: "Il tuo signer chiede l'approvazione a ogni azione — usa Aggiorna e Invia secondo necessità.",
|
|
},
|
|
};
|
|
|
|
export default drift;
|