i18n: close the drift — all 20 locales back to 100%
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.
This commit is contained in:
parent
10299d07f2
commit
9a5b706b1a
42 changed files with 6798 additions and 273 deletions
18
AGENTS.md
18
AGENTS.md
|
|
@ -2569,8 +2569,22 @@ similar are internal endpoints/hook names, not credits — leave them.)
|
|||
stays English (spot, park, bowl, DIY, vert, crew, line, Stash, The Lab, Nostr,
|
||||
Lightning, Zap, Relay, sats) because Thai skaters use the English terms.
|
||||
|
||||
### Ten more locales — 12 total, all 100% (2026-10-08)
|
||||
- Added **pt, fr, de, it, nl, pl, ru, ko** → **12 locales**: en, es, th, ja,
|
||||
### i18n drift closed — all 20 locales 100% (2026-10-13)
|
||||
- Every non-en/es locale had fallen to **97%** (245 keys each — `trustUi`,
|
||||
`labOptions`, `cordnUi`, `socialUi`, `walletUi`, `marketTerms`, …). Backfilled
|
||||
**245 × 20 = 4,900 strings** into `src/i18n/<lang>/drift.ts` (a pure fragment).
|
||||
- ⚠️ **`drift.ts` MUST be merged, not shallow-spread.** Its keys live in
|
||||
namespaces that already exist in the `batchN` fragments, so `...drift` last
|
||||
would **replace whole namespaces** (e.g. `socialUi` 688 → 24 keys, tanking
|
||||
coverage). Every locale `index.ts` now does
|
||||
`deepMerge({ ...batchN }, drift)` via the shared **`src/i18n/deepMerge.ts`**
|
||||
(`deepMerge(base, extra)` — recursive, string-dictionary only). Add future
|
||||
late keys to `drift.ts` and they merge the same way. `check-i18n.mjs` should
|
||||
stay at 100% for all 20.
|
||||
- (Backfilled by parallel translation subagents; brand/protocol/trick names kept
|
||||
English, `{{placeholders}}` preserved — all verified.)
|
||||
|
||||
### Ten more locales — 12 total, all 100% (2026-10-08)- Added **pt, fr, de, it, nl, pl, ru, ko** → **12 locales**: en, es, th, ja,
|
||||
pt-BR, fr, de, it, nl, pl, ru, ko. All at **100% (8,450 keys)**, en/es in parity.
|
||||
- **Locales are LAZY-LOADED.** `language.ts` exports `LANGUAGE_LOADERS`
|
||||
(dynamic `import()` per locale); only `en` is static (source + runtime
|
||||
|
|
|
|||
319
src/i18n/cs/drift.ts
Normal file
319
src/i18n/cs/drift.ts
Normal file
|
|
@ -0,0 +1,319 @@
|
|||
/**
|
||||
* cs — drift fill (245 keys added after en/es only).
|
||||
* Nested fragment spread additively into `cs/index.ts`.
|
||||
*/
|
||||
const drift = {
|
||||
"nav": {
|
||||
"searchLanguages": "Hledat jazyky...",
|
||||
"noLanguages": "Nenalezeny žádné jazyky"
|
||||
},
|
||||
"mapPage": {
|
||||
"searchSuggestPlaces": "Místa"
|
||||
},
|
||||
"mapUi": {
|
||||
"firstRunTitle": "Začít",
|
||||
"firstRunAddSpot": "Přidej svůj první spot",
|
||||
"firstRunJoinCrew": "Přidej se k crew",
|
||||
"firstRunStartCrew": "Založ si crew",
|
||||
"firstRunWallet": "Nastav si peněženku",
|
||||
"forecastDays": "Předpověď na {{count}} dní"
|
||||
},
|
||||
"spotUi": {
|
||||
"forecastDays": "Předpověď na {{count}} dní"
|
||||
},
|
||||
"marketUi": {
|
||||
"trades": {
|
||||
"stateRevoked": "Odvoláno",
|
||||
"stateVerifying": "Ověřování"
|
||||
},
|
||||
"loadFailed": "Nepodařilo se připojit k relayům. Zkontroluj připojení a zkus to znovu.",
|
||||
"statusPending": "Čeká",
|
||||
"offers": {
|
||||
"closeDeal": "Uzavřít deal",
|
||||
"loadFailed": "Nabídky se nepodařilo načíst. Zkontroluj připojení a zkus to znovu."
|
||||
},
|
||||
"pay": {
|
||||
"nonSats": "Tato nabídka je oceněna v {{currency}}. Platba v aplikaci je pouze v sats. Vyrovnej se přímo s prodejcem.",
|
||||
"unsupported": "Tento platební kód (žádost Cashu) zatím není podporován. Požádej prodejce o Lightning fakturu nebo adresu."
|
||||
},
|
||||
"escrowRequest": {
|
||||
"lockedNotSent": "Prostředky jsou uzamčeny v escrow a uloženy v tomto zařízení, ale žádost se neodeslala. Otevři nabídku znovu a zkus to. Neplať znovu.",
|
||||
"mintLabel": "Mint (kde jsou prostředky uzamčeny)",
|
||||
"sellerMintHint": "Prodejce upřednostňuje tento mint; prostředky zde uzamčené pro něj bude nejjednodušší uplatnit.",
|
||||
"mintHint": "Escrow sídlí v tomto mintu. Prodejce zde uplatňuje, takže vyber takový, kterému oba důvěřujete.",
|
||||
"noMints": "Nejsou dostupné žádné minty",
|
||||
"p2pkUnsupported": "Tento mint neinzeruje podporu P2PK (NUT-11), takže zde escrow nelze uzamknout. Zvol jiný mint."
|
||||
}
|
||||
},
|
||||
"labUi": {
|
||||
"offerClothing": "Nabídnout oblečení",
|
||||
"tabClothing": "Oblečení",
|
||||
"empty": {
|
||||
"clothingTitle": "Zatím žádní návrháři oblečení",
|
||||
"clothingBody": "Buď první, kdo nabídne oblečení na zakázku, týmové dresy a apparel pro scénu."
|
||||
},
|
||||
"craftFields": {
|
||||
"sizing": "Rozsah velikostí",
|
||||
"samples": "Vzorky / prototypy",
|
||||
"customization": "Přizpůsobení"
|
||||
}
|
||||
},
|
||||
"socialUi": {
|
||||
"coordinator": {
|
||||
"ourDefaultTitle": "Koordinátor SkateSpots",
|
||||
"ourDefaultDesc": "SkateSpots provozuje koordinátora na relay.skate-spots.org. Používej ho ve výchozím nastavení, nebo si spusť vlastní — koordinátor vidí pouze šifrovaný text a metadata, nikdy tvé zprávy.",
|
||||
"useOurs": "Použít koordinátor SkateSpots"
|
||||
},
|
||||
"crewCoordinator": {
|
||||
"encryptedChat": "Šifrovaný chat",
|
||||
"privateChatName": "Soukromý chat",
|
||||
"privateChatDesc": "Skupinový chat s forward secrecy (MLS) přes koordinátora.",
|
||||
"privateChatDescFull": "Soukromý chat vytvoří jednou administrátor, poté se členové přidají.",
|
||||
"chatRowDesc": "Všichni v crew — zapečetěno klíčem každého člena (NIP-17).",
|
||||
"openChat": "Otevřít",
|
||||
"setUpChat": "Nastavit",
|
||||
"joinChat": "Připojit se",
|
||||
"checking": "Kontroluji…",
|
||||
"openInAnotherApp": "Otevřít v jiné aplikaci",
|
||||
"openInCordnWeb": "Cordn (web)",
|
||||
"openCordnGroup": "Otevřít crew chat",
|
||||
"copyForStaircase": "Kopírovat pro Staircase"
|
||||
},
|
||||
"dms": {
|
||||
"refresh": "Obnovit",
|
||||
"crews": "Crew",
|
||||
"crewFounder": "Zakladatel",
|
||||
"crewMember": "Člen",
|
||||
"crewOpen": "Otevřít",
|
||||
"crewSetUp": "Nastavit"
|
||||
},
|
||||
"form": {
|
||||
"cordnGroup": "Skupina Cordn",
|
||||
"cordnGroupHint": "Volitelné: vlož odkaz na skupinu ze Staircase nebo Cordn web. Tvoje crew tak získá skutečný end-to-end MLS chat hostovaný na našem koordinátoru."
|
||||
}
|
||||
},
|
||||
"settingsUi": {
|
||||
"settingsPage": {
|
||||
"trust": "Důvěra",
|
||||
"trustSub": "Zdroje a zobrazení"
|
||||
}
|
||||
},
|
||||
"walletUi": {
|
||||
"trust": {
|
||||
"mute": "Ztlumit",
|
||||
"muted": "Ztlumeno",
|
||||
"mutedDesc": "Nebudeš vídat jejich obsah.",
|
||||
"muteFailed": "Ztlumení se nezdařilo. Zkus to znovu.",
|
||||
"loginToMute": "Přihlas se, abys mohl ztlumit.",
|
||||
"attributedNetwork": "Od lidí ve tvé síti",
|
||||
"attributedProviderHouse": "Od komunitního poskytovatele důvěry",
|
||||
"attributedProviderCustom": "Od poskytovatele, kterého jsi zvolil",
|
||||
"howItWorks": "Jak funguje důvěra",
|
||||
"flaggedNoticeTitle": "Nahlášeno důvěryhodnými skejťáky",
|
||||
"flaggedNoticeDesc": "Buď opatrný. Důvěryhodní lidé v síti tento účet nahlásili.",
|
||||
"flaggedReporterFollow": "{{count}} z těch, které sleduješ",
|
||||
"flaggedReporterNetwork": "{{count}} ve tvé síti",
|
||||
"flaggedReporterOther": "{{count}} dalších účtů",
|
||||
"flaggedReport": "Nahlásit",
|
||||
"flaggedDismiss": "Zavřít",
|
||||
"bucketVerified": "Ověřeno",
|
||||
"bucketUnknown": "Neznámé",
|
||||
"bucketFlagged": "Označeno",
|
||||
"bucketVerifiedDesc": "Někdo v tvé síti se za tento účet zaručuje.",
|
||||
"bucketUnknownDesc": "Nikdo v tvé síti se za tento účet zatím nezaručil.",
|
||||
"bucketFlaggedDesc": "Důvěryhodní lidé tento účet nahlásili.",
|
||||
"reportedByTrusted": "Nahlášeno {{count}} důvěryhodnými lidmi"
|
||||
}
|
||||
},
|
||||
"trustUi": {
|
||||
"alertsTitle": "Upozornění sítě",
|
||||
"alertsDesc": "Účty, které sleduješ a které důvěryhodní lidé nahlásili nebo ztlumili.",
|
||||
"alertsEmpty": "Žádná upozornění. U sledovaných účtů kontrolujeme nahlášení od důvěryhodných lidí.",
|
||||
"alertsReported": "Nahlášeno {{count}} důvěryhodnými lidmi",
|
||||
"alertsMuted": "Ztlumeno {{count}} důvěryhodnými lidmi",
|
||||
"alertsIgnore": "Ignorovat",
|
||||
"alertsUnfollow": "Přestat sledovat",
|
||||
"alertsLogin": "Přihlas se, abys viděl upozornění pro sledované účty.",
|
||||
"providerTitle": "Poskytovatel",
|
||||
"providerDesc": "Skóre pochází od poskytovatele, kterého si zvolíš. Výchozí je komunitní poskytovatel.",
|
||||
"useCommunity": "Použít komunitního poskytovatele",
|
||||
"setProvider": "Nastavit poskytovatele",
|
||||
"customPubkeyPlaceholder": "npub nebo hex veřejný klíč poskytovatele",
|
||||
"customRelayPlaceholder": "wss://relay.example.com",
|
||||
"invalidProvider": "Zadej platný npub nebo 64znakový hex veřejný klíč a relay wss://.",
|
||||
"publishFailed": "Poskytovatele se nepodařilo publikovat. Zkus to znovu.",
|
||||
"providerSaved": "Poskytovatel aktualizován.",
|
||||
"loggedOutProvider": "Přihlas se, abys zvolil poskytovatele.",
|
||||
"showMarks": "Zobrazit značky důvěry",
|
||||
"showMarksDesc": "Ověřené a neznámé značky. Nahlášení se zobrazují vždy.",
|
||||
"sourceLabel": "Zdroj",
|
||||
"sourceHouse": "Komunitní poskytovatel důvěry",
|
||||
"sourceCustom": "Tvůj poskytovatel",
|
||||
"loggedOut": "Přihlas se, abys zvolil vlastního poskytovatele důvěry.",
|
||||
"seoTitle": "Jak funguje důvěra",
|
||||
"seoDescription": "Jak SkateSpots zobrazuje důvěru: tři stavy, odkud skóre pochází a proč nepřítomnost není nedůvěra.",
|
||||
"title": "Jak funguje důvěra",
|
||||
"intro": "Důvěra je tu signál, ne rozsudek. Pochází z toho, koho znáš, nebo od poskytovatele, kterého si zvolíš. Neřadíme lidi globálně.",
|
||||
"statesTitle": "Tři stavy",
|
||||
"verifiedTitle": "Ověřeno",
|
||||
"verifiedDesc": "Někdo v tvé síti se za tento účet zaručuje: známý známého nebo tvůj zvolený poskytovatel.",
|
||||
"unknownTitle": "Neznámé",
|
||||
"unknownDesc": "Zatím se nikdo nezaručil. Zde začíná každý nový účet.",
|
||||
"flaggedTitle": "Označeno",
|
||||
"flaggedDesc": "Důvěryhodní lidé tento účet nahlásili. Je to upozornění, abys se podíval blíž, ne důkaz čehokoli.",
|
||||
"absenceTitle": "Žádný odznak není nedůvěra",
|
||||
"absenceDesc": "Většina účtů neukazuje vůbec nic. To znamená, že se za ně nikdo v tvé síti zatím nezaručil, ne že je něco špatně. Chybějící značku nikdy nečti jako negativum.",
|
||||
"sourceTitle": "Kdo to počítá",
|
||||
"sourceDesc": "Ve výchozím nastavení používáme tvou vlastní síť. Můžeš také zvolit poskytovatele důvěry, který publikuje podepsaná skóre přes Nostr (NIP-85), nebo zobrazení vypnout. Označeno se zobrazuje vždy, protože je to bezpečnostní signál.",
|
||||
"endorsementTitle": "Přítomnost není schválení",
|
||||
"endorsementDesc": "Ověřená značka znamená, že se někdo zaručil, ne že je člověk dobrý. Označení znamená, že ho nahlásili důvěryhodní lidé, ne že je vinen. Než se rozhodneš, prohlédni si podrobnosti.",
|
||||
"povTitle": "Záleží na úhlu pohledu",
|
||||
"povDesc": "Skóre je relativní k tomu, kdo se dívá. Hodnocení od jednoho poskytovatele nebo osoby není srovnatelné s jiným a nikdy je nepodáváme jako objektivní fakt.",
|
||||
"settingsCta": "Spravovat v Nastavení"
|
||||
},
|
||||
"marketTerms": {
|
||||
"link": "Pravidla Marketplace",
|
||||
"seoTitle": "Pravidla Marketplace",
|
||||
"seoDescription": "Jak fungují nabídky vybavení na SkateSpots: peer-to-peer, kupující pozor, a pravidla.",
|
||||
"title": "Pravidla Marketplace",
|
||||
"intro": "SkateSpots je peer-to-peer deska na vybavení. Jednáš přímo s druhou osobou: nedržíme prostředky, nezasíláme předměty ani neřešíme spory.",
|
||||
"howTitle": "Jak to funguje",
|
||||
"howBody": "Vystav vybavení, kontaktuj prodejce v soukromé zprávě a vyrovnej se přímo (hotovost, Lightning nebo výměna). Neexistuje košík ani pokladna.",
|
||||
"rulesTitle": "Co není dovoleno",
|
||||
"rulesBody": "Žádný nelegální, nebezpečný nebo pro dospělé určený obsah; žádné drogy, zbraně, padělky ani kradené zboží. Nabídky se týkají skate vybavení a souvisejících věcí.",
|
||||
"respectTitle": "Buď ohleduplný",
|
||||
"respectBody": "Žádné zneužívání, obtěžování, vyhrožování ani nenávist. Moderátoři mohou nabídky nebo účty skrýt.",
|
||||
"trustTitle": "Důvěra je vodítko, ne záruka",
|
||||
"trustBody": "Značky ověření a obchodní reputace jsou signály ze sítě, ne sliby. Než obchoduješ, udělej si vlastní kontrolu.",
|
||||
"trustLink": "Jak funguje důvěra",
|
||||
"privacyLink": "Co opouští tvé zařízení",
|
||||
"safetyTitle": "Obchoduj bezpečně",
|
||||
"safetyBody": "Při předání se sejděte na veřejnosti, u zásilek použij escrow nebo zálohu v dobré víře a nikdy neposílej peníze mimo aplikaci.",
|
||||
"moderationTitle": "Moderace je měkká a vratná",
|
||||
"moderationBody": "Skrytý obsah zůstává na relayích a lze ho obnovit; spory mezi lidmi si řešíš sám."
|
||||
},
|
||||
"labOptions": {
|
||||
"clothing": {
|
||||
"service": {
|
||||
"tees": "Trička",
|
||||
"hoodies": "Mikiny a tepláky",
|
||||
"pants": "Kalhoty a šortky",
|
||||
"jackets": "Bundy a svrchní oděvy",
|
||||
"kits": "Týmové dresy a komplety",
|
||||
"caps": "Kšiltovky a čepice",
|
||||
"socks": "Ponožky",
|
||||
"accessories": "Tašky a doplňky",
|
||||
"footwear": "Obuv a boty",
|
||||
"patches": "Našité záplaty a aplikace",
|
||||
"griptape": "Griptape a oblečení na deck",
|
||||
"onepiece": "Unikáty / upcyklace"
|
||||
},
|
||||
"serviceDesc": {
|
||||
"tees": "Trička a topy na zakázku",
|
||||
"hoodies": "Mikiny, svetry a tepláky",
|
||||
"pants": "Pracovní kalhoty, cargo a šortky",
|
||||
"jackets": "Trenýrkové bundy, shell a pracovní bundy",
|
||||
"kits": "Týmové dresy, komplety a uniformy",
|
||||
"caps": "Kšiltovky, čepice a pokrývky hlavy",
|
||||
"socks": "Ponožky a pletené zboží",
|
||||
"accessories": "Tašky, opasky a drobnosti",
|
||||
"footwear": "Boty a obuv na zakázku",
|
||||
"patches": "Vyšívané záplaty a aplikace",
|
||||
"griptape": "Umění na griptape a oblečení na deck",
|
||||
"onepiece": "Jednotlivé kusy a upcyklované oděvy"
|
||||
},
|
||||
"method": {
|
||||
"screenprint": "Sítotisk",
|
||||
"dtg": "DTG / direct-to-garment",
|
||||
"embroidery": "Výšivka",
|
||||
"cutsew": "Cut & sew",
|
||||
"sublimation": "Sublimace",
|
||||
"heattransfer": "Heat transfer / vinyl",
|
||||
"garmentdye": "Barvení oděvů",
|
||||
"knit": "Pletené zboží",
|
||||
"patchwork": "Patchwork",
|
||||
"allover": "All-over potisk"
|
||||
},
|
||||
"material": {
|
||||
"cotton": "Bavlna",
|
||||
"heavyweight": "Těžká gramáž",
|
||||
"organic": "Organická / udržitelná",
|
||||
"fleece": "Fleece",
|
||||
"denim": "Denim",
|
||||
"canvas": "Plátno",
|
||||
"nylon": "Nylon / technický",
|
||||
"wool": "Merino / vlna",
|
||||
"leather": "Kůže",
|
||||
"recycled": "Recyklované / deadstock"
|
||||
}
|
||||
}
|
||||
},
|
||||
"becomeRolesUi": {
|
||||
"clothing": {
|
||||
"seoTitle": "Staň se návrhářem oblečení - SkateSpots",
|
||||
"seoDescription": "Oblečení na zakázku, týmové dresy a apparel pro scénu.",
|
||||
"heading": "Návrhář oblečení",
|
||||
"tagline": "Oblečení na zakázku, týmové dresy a apparel pro scénu",
|
||||
"noun": "návrhář oblečení",
|
||||
"rateLabel": "Sazba",
|
||||
"portfolioLabel": "Odkaz na obchod / portfolio",
|
||||
"sectionWhatYouMake": "Co vyrábíš",
|
||||
"sectionHowYouMake": "Jak to vyrábíš",
|
||||
"sectionMaterials": "Materiály",
|
||||
"minimumPlaceholder": "např. 10 kusů",
|
||||
"turnaroundPlaceholder": "např. 2-3 týdny",
|
||||
"sizingPlaceholder": "např. XS-3XL / na míru",
|
||||
"samplesHelper": "Nabízíš vzorky nebo prototypy před plnou sérií?",
|
||||
"customizationPlaceholder": "např. jména, čísla, grafika"
|
||||
}
|
||||
},
|
||||
"weatherUi": {
|
||||
"updated": "Aktualizováno",
|
||||
"refresh": "Obnovit",
|
||||
"unavailable": "Počasí nedostupné.",
|
||||
"retry": "Zkusit znovu",
|
||||
"sunrise": "Východ slunce",
|
||||
"sunset": "Západ slunce",
|
||||
"legendTitle": "Skóre počasí",
|
||||
"legendWeatherOnly": "Jen počasí"
|
||||
},
|
||||
"cordnUi": {
|
||||
"title": "Soukromý chat",
|
||||
"subtitle": "End-to-end šifrované (MLS) mezi členy crew. Koordinátor přenáší pouze šifrovaný text a metadata — nikdy nevidí obsah zpráv.",
|
||||
"notLoggedIn": "Přihlas se, abys mohl použít soukromý chat crew.",
|
||||
"membersOnly": "Soukromý chat mohou otevřít jen členové crew.",
|
||||
"connecting": "Připojování…",
|
||||
"noCoordinator": "Pro tuto crew zatím není nastaven žádný koordinátor.",
|
||||
"noGroupAdmin": "Soukromý chat této crew zatím nebyl vytvořen.",
|
||||
"noGroupMember": "V soukromém chatu této crew zatím nejsi.",
|
||||
"create": "Vytvořit soukromý chat",
|
||||
"requestJoin": "Požádat o připojení",
|
||||
"checkInvite": "Zkontrolovat pozvánku",
|
||||
"requested": "Žádost odeslána — administrátor crew ji schválí.",
|
||||
"noInvite": "Zatím nečeká žádná pozvánka. Požádej administrátora o schválení žádosti.",
|
||||
"placeholder": "Napiš crew…",
|
||||
"send": "Poslat",
|
||||
"refresh": "Obnovit",
|
||||
"requests": "Žádosti o připojení",
|
||||
"checkRequests": "Zkontrolovat žádosti",
|
||||
"approve": "Přidat",
|
||||
"noRequests": "Žádné čekající žádosti o připojení.",
|
||||
"inviteHint": "Zatím jsi v tomto chatu jen ty — členové crew mohou klepnout na „Požádat o připojení“ a ty je zde schválíš.",
|
||||
"memberCount": "{{count}} ve skupině",
|
||||
"you": "Ty",
|
||||
"groupRef": "Odkaz na skupinu",
|
||||
"copyRef": "Kopírovat",
|
||||
"copied": "Zkopírováno",
|
||||
"attachImage": "Přiložit obrázek",
|
||||
"uploading": "Nahrávání…",
|
||||
"uploadFailed": "Obrázek se nepodařilo nahrát.",
|
||||
"bannerTitle": "Tato crew zatím nemá soukromý chat",
|
||||
"bannerBody": "Nastav end-to-end šifrovaný (MLS) chat pro svou crew — členové se připojí z karty.",
|
||||
"bannerCta": "Nastavit",
|
||||
"ready": "Připojeno · MLS",
|
||||
"errorPrefix": "Koordinátora se nepodařilo kontaktovat",
|
||||
"interactiveHint": "Tvůj signer žádá o schválení u každé akce — podle potřeby použij Obnovit a Poslat."
|
||||
}
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,8 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
const cs = {
|
||||
const cs = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -16,6 +19,8 @@ const cs = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default cs;
|
||||
|
|
|
|||
321
src/i18n/de/drift.ts
Normal file
321
src/i18n/de/drift.ts
Normal file
|
|
@ -0,0 +1,321 @@
|
|||
/**
|
||||
* de — 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: "Sprachen suchen…",
|
||||
noLanguages: "Keine Sprachen gefunden",
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: "Orte",
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: "Loslegen",
|
||||
firstRunAddSpot: "Füge deinen ersten Spot hinzu",
|
||||
firstRunJoinCrew: "Einer Crew beitreten",
|
||||
firstRunStartCrew: "Starte deine Crew",
|
||||
firstRunWallet: "Richte deine Wallet ein",
|
||||
forecastDays: "{{count}}-Tage-Vorhersage",
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: "{{count}}-Tage-Vorhersage",
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: "widerrufen",
|
||||
stateVerifying: "wird geprüft",
|
||||
},
|
||||
loadFailed: "Relays konnten nicht erreicht werden. Prüfe deine Verbindung und versuche es erneut.",
|
||||
statusPending: "ausstehend",
|
||||
offers: {
|
||||
closeDeal: "Deal abschließen",
|
||||
loadFailed: "Angebote konnten nicht geladen werden. Prüfe deine Verbindung und versuche es erneut.",
|
||||
},
|
||||
pay: {
|
||||
nonSats: "Dieses Angebot ist in {{currency}} ausgewiesen. In-App-Zahlung ist nur in sats möglich. Rechne direkt mit dem Verkäufer ab.",
|
||||
unsupported: "Dieser Zahlungscode (eine Cashu-Anfrage) wird noch nicht unterstützt. Bitte den Verkäufer um eine Lightning-Rechnung oder -Adresse.",
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: "Die Gelder sind in der Treuhand gesperrt und auf diesem Gerät gespeichert, aber die Anfrage wurde nicht gesendet. Öffne das Angebot erneut, um es zu wiederholen. Zahle nicht erneut.",
|
||||
mintLabel: "Mint (wo die Gelder gesperrt sind)",
|
||||
sellerMintHint: "Der Verkäufer bevorzugt diesen Mint; hier gesperrte Gelder kann er am einfachsten einlösen.",
|
||||
mintHint: "Die Treuhand liegt bei diesem Mint. Der Verkäufer löst hier ein, wähle also einen, dem ihr beide vertraut.",
|
||||
noMints: "Keine Mints verfügbar",
|
||||
p2pkUnsupported: "Dieser Mint gibt keine P2PK-Unterstützung (NUT-11) an, daher kann die Treuhand hier nicht gesperrt werden. Wähle einen anderen Mint.",
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: "Kleidung anbieten",
|
||||
tabClothing: "Kleidung",
|
||||
empty: {
|
||||
clothingTitle: "Noch keine Kleidungsdesigner",
|
||||
clothingBody: "Sei der Erste, der individuelle Kleidung, Team-Kits und Apparel für die Szene anbietet.",
|
||||
},
|
||||
craftFields: {
|
||||
sizing: "Größenbereich",
|
||||
samples: "Muster / Prototypen",
|
||||
customization: "Individualisierung",
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: "SkateSpots-Koordinator",
|
||||
ourDefaultDesc: "SkateSpots betreibt einen Koordinator unter relay.skate-spots.org. Nutze ihn standardmäßig oder betreibe deinen eigenen – ein Koordinator sieht stets nur Chiffretext und Metadaten, niemals deine Nachrichten.",
|
||||
useOurs: "SkateSpots-Koordinator verwenden",
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: "Verschlüsselter Chat",
|
||||
privateChatName: "Privater Chat",
|
||||
privateChatDesc: "Gruppenchat mit Forward Secrecy (MLS) über einen Koordinator.",
|
||||
privateChatDescFull: "Der private Chat wird einmal von einem Admin erstellt, dann treten Mitglieder bei.",
|
||||
chatRowDesc: "Alle in der Crew – versiegelt mit dem Schlüssel jedes Mitglieds (NIP-17).",
|
||||
openChat: "Öffnen",
|
||||
setUpChat: "Einrichten",
|
||||
joinChat: "Beitreten",
|
||||
checking: "Wird geprüft…",
|
||||
openInAnotherApp: "In einer anderen App öffnen",
|
||||
openInCordnWeb: "Cordn (Web)",
|
||||
openCordnGroup: "Crew-Chat öffnen",
|
||||
copyForStaircase: "Für Staircase kopieren",
|
||||
},
|
||||
dms: {
|
||||
refresh: "Aktualisieren",
|
||||
crews: "Crews",
|
||||
crewFounder: "Gründer",
|
||||
crewMember: "Mitglied",
|
||||
crewOpen: "Öffnen",
|
||||
crewSetUp: "Einrichten",
|
||||
},
|
||||
form: {
|
||||
cordnGroup: "Cordn-Gruppe",
|
||||
cordnGroupHint: "Optional: Füge den Gruppenlink aus Staircase oder Cordn Web ein. Deine Crew erhält dann echten Ende-zu-Ende-MLS-Chat, gehostet auf unserem Koordinator.",
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: "Vertrauen",
|
||||
trustSub: "Quellen und Anzeige",
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: "Stummschalten",
|
||||
muted: "Stummgeschaltet",
|
||||
mutedDesc: "Du siehst deren Inhalte nicht.",
|
||||
muteFailed: "Stummschalten fehlgeschlagen. Versuche es erneut.",
|
||||
loginToMute: "Melde dich an, um stummzuschalten.",
|
||||
attributedNetwork: "Von Personen in deinem Netzwerk",
|
||||
attributedProviderHouse: "Vom Community-Vertrauensanbieter",
|
||||
attributedProviderCustom: "Von dem Anbieter, den du gewählt hast",
|
||||
howItWorks: "Wie Vertrauen funktioniert",
|
||||
flaggedNoticeTitle: "Von vertrauenswürdigen Skatern gemeldet",
|
||||
flaggedNoticeDesc: "Sei vorsichtig. Vertrauenswürdige Personen im Netzwerk haben dieses Konto gemeldet.",
|
||||
flaggedReporterFollow: "{{count}}, denen du folgst",
|
||||
flaggedReporterNetwork: "{{count}} in deinem Netzwerk",
|
||||
flaggedReporterOther: "{{count}} weitere Konten",
|
||||
flaggedReport: "Melden",
|
||||
flaggedDismiss: "Verwerfen",
|
||||
bucketVerified: "Verifiziert",
|
||||
bucketUnknown: "Unbekannt",
|
||||
bucketFlagged: "Markiert",
|
||||
bucketVerifiedDesc: "Jemand in deinem Netzwerk bürgt für dieses Konto.",
|
||||
bucketUnknownDesc: "Noch niemand in deinem Netzwerk hat für dieses Konto gebürgt.",
|
||||
bucketFlaggedDesc: "Vertrauenswürdige Personen haben dieses Konto gemeldet.",
|
||||
reportedByTrusted: "Von {{count}} vertrauenswürdigen Personen gemeldet",
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: "Netzwerk-Warnungen",
|
||||
alertsDesc: "Konten, denen du folgst und die vertrauenswürdige Personen gemeldet oder stummgeschaltet haben.",
|
||||
alertsEmpty: "Keine Warnungen. Wir prüfen die Konten, denen du folgst, auf vertrauenswürdige Meldungen.",
|
||||
alertsReported: "Von {{count}} vertrauenswürdigen Personen gemeldet",
|
||||
alertsMuted: "Von {{count}} vertrauenswürdigen Personen stummgeschaltet",
|
||||
alertsIgnore: "Ignorieren",
|
||||
alertsUnfollow: "Entfolgen",
|
||||
alertsLogin: "Melde dich an, um Warnungen für die Konten zu sehen, denen du folgst.",
|
||||
providerTitle: "Anbieter",
|
||||
providerDesc: "Bewertungen kommen von einem Anbieter, den du wählst. Der Community-Anbieter ist die Standardeinstellung.",
|
||||
useCommunity: "Community-Anbieter verwenden",
|
||||
setProvider: "Anbieter festlegen",
|
||||
customPubkeyPlaceholder: "npub oder Hex-Pubkey des Anbieters",
|
||||
customRelayPlaceholder: "wss://relay.beispiel.com",
|
||||
invalidProvider: "Gib einen gültigen npub oder 64-stelligen Hex-Pubkey und ein wss://-Relay ein.",
|
||||
publishFailed: "Anbieter konnte nicht veröffentlicht werden. Versuche es erneut.",
|
||||
providerSaved: "Anbieter aktualisiert.",
|
||||
loggedOutProvider: "Melde dich an, um einen Anbieter zu wählen.",
|
||||
showMarks: "Vertrauensmarkierungen anzeigen",
|
||||
showMarksDesc: "Verifizierte und unbekannte Markierungen. Meldungen werden immer angezeigt.",
|
||||
sourceLabel: "Quelle",
|
||||
sourceHouse: "Community-Vertrauensanbieter",
|
||||
sourceCustom: "Dein Anbieter",
|
||||
loggedOut: "Melde dich an, um deinen eigenen Vertrauensanbieter zu wählen.",
|
||||
seoTitle: "Wie Vertrauen funktioniert",
|
||||
seoDescription: "Wie SkateSpots Vertrauen zeigt: drei Zustände, woher Bewertungen kommen und warum Abwesenheit kein Misstrauen ist.",
|
||||
title: "Wie Vertrauen funktioniert",
|
||||
intro: "Vertrauen ist hier ein Signal, kein Urteil. Es kommt von denen, die du kennst, oder von einem Anbieter, den du wählst. Wir bewerten Menschen nicht global.",
|
||||
statesTitle: "Drei Zustände",
|
||||
verifiedTitle: "Verifiziert",
|
||||
verifiedDesc: "Jemand in deinem Netzwerk bürgt für dieses Konto: ein Freund eines Freundes oder dein gewählter Anbieter.",
|
||||
unknownTitle: "Unbekannt",
|
||||
unknownDesc: "Noch hat niemand gebürgt. Hier startet jedes neue Konto.",
|
||||
flaggedTitle: "Markiert",
|
||||
flaggedDesc: "Vertrauenswürdige Personen haben dieses Konto gemeldet. Es ist eine Warnung, genauer hinzusehen, kein Beweis.",
|
||||
absenceTitle: "Kein Abzeichen ist kein Misstrauen",
|
||||
absenceDesc: "Die meisten Konten zeigen gar nichts. Das bedeutet, dass noch niemand in deinem Netzwerk für sie gebürgt hat, nicht dass etwas nicht stimmt. Lies eine fehlende Markierung niemals als negativ.",
|
||||
sourceTitle: "Wer es berechnet",
|
||||
sourceDesc: "Standardmäßig nutzen wir dein eigenes Netzwerk. Du kannst auch einen Vertrauensanbieter wählen, der signierte Scores über Nostr (NIP-85) veröffentlicht, oder die Anzeige ausschalten. Markierungen werden immer angezeigt, da sie ein Sicherheitssignal sind.",
|
||||
endorsementTitle: "Präsenz ist keine Befürwortung",
|
||||
endorsementDesc: "Eine verifizierte Markierung bedeutet, dass jemand gebürgt hat, nicht dass die Person gut ist. Eine Meldung bedeutet, dass vertrauenswürdige Personen sie gemeldet haben, nicht dass sie schuldig ist. Prüfe die Details, bevor du entscheidest.",
|
||||
povTitle: "Es kommt auf den Standpunkt an",
|
||||
povDesc: "Eine Bewertung ist relativ zu dem, der sie betrachtet. Ein Rang eines Anbieters oder einer Person ist mit einem anderen nicht vergleichbar, und wir stellen keinen als objektive Tatsache dar.",
|
||||
settingsCta: "In den Einstellungen verwalten",
|
||||
},
|
||||
marketTerms: {
|
||||
link: "Marketplace-Richtlinien",
|
||||
seoTitle: "Marketplace-Richtlinien",
|
||||
seoDescription: "Wie SkateSpots-Gear-Angebote funktionieren: von Person zu Person, Käufer aufgepasst, und die Regeln.",
|
||||
title: "Marketplace-Richtlinien",
|
||||
intro: "SkateSpots ist ein Gear-Board von Person zu Person. Du handelst direkt mit der anderen Person: Wir halten keine Gelder, versenden keine Artikel und lösen keine Streitigkeiten.",
|
||||
howTitle: "Wie es funktioniert",
|
||||
howBody: "Stelle Gear ein, kontaktiere den Verkäufer per privater Nachricht und rechne direkt ab (Bargeld, Lightning oder Tausch). Es gibt keinen Warenkorb und keinen Checkout.",
|
||||
rulesTitle: "Was nicht erlaubt ist",
|
||||
rulesBody: "Keine illegalen, gefährlichen oder Erwachseneninhalte; keine Drogen, Waffen, Fälschungen oder gestohlenen Waren. Halte Angebote auf Skate-Gear und verwandte Artikel beschränkt.",
|
||||
respectTitle: "Sei respektvoll",
|
||||
respectBody: "Keine Beleidigungen, Belästigung, Drohungen oder Hass. Moderatoren können Angebote oder Konten ausblenden.",
|
||||
trustTitle: "Vertrauen ist ein Leitfaden, keine Garantie",
|
||||
trustBody: "Verifizierungsmarkierungen und Handelsreputation sind Signale aus dem Netzwerk, keine Versprechen. Prüfe selbst, bevor du handelst.",
|
||||
trustLink: "Wie Vertrauen funktioniert",
|
||||
privacyLink: "Was dein Gerät verlässt",
|
||||
safetyTitle: "Handle sicher",
|
||||
safetyBody: "Triff dich für Übergaben an öffentlichen Orten, nutze die Treuhand oder eine Anzahlung bei Versand und sende niemals Geld außerhalb der App.",
|
||||
moderationTitle: "Moderation ist sanft und umkehrbar",
|
||||
moderationBody: "Ausgeblendete Inhalte bleiben auf den Relays und können wiederhergestellt werden; Streitigkeiten zwischen Personen musst du selbst lösen.",
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: "T-Shirts",
|
||||
hoodies: "Hoodies & Sweatshirts",
|
||||
pants: "Hosen & Shorts",
|
||||
jackets: "Jacken & Outerwear",
|
||||
kits: "Team-Kits & Trikots",
|
||||
caps: "Caps & Beanies",
|
||||
socks: "Socken",
|
||||
accessories: "Taschen & Accessoires",
|
||||
footwear: "Schuhe",
|
||||
patches: "Patches & Applikationen",
|
||||
griptape: "Griptape- & Deck-Apparel",
|
||||
onepiece: "Einzelstücke / Upcycling",
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: "Individuelle T-Shirts und Tops",
|
||||
hoodies: "Hoodies, Sweater und Jogginghosen",
|
||||
pants: "Arbeitshosen, Cargos und Shorts",
|
||||
jackets: "Coaches, Shells und Arbeitsjacken",
|
||||
kits: "Team-Kits, Trikots und Uniformen",
|
||||
caps: "Caps, Beanies und Kopfbedeckungen",
|
||||
socks: "Crew-Socken und Strickwaren",
|
||||
accessories: "Taschen, Gürtel und Kleinlederwaren",
|
||||
footwear: "Individuelle Schuhe",
|
||||
patches: "Bestickte Patches und Applikationen",
|
||||
griptape: "Griptape-Kunst und Deck-Apparel",
|
||||
onepiece: "Einzelstücke und Upcycling-Kleidung",
|
||||
},
|
||||
method: {
|
||||
screenprint: "Siebdruck",
|
||||
dtg: "DTG / Direct-to-Garment",
|
||||
embroidery: "Stickerei",
|
||||
cutsew: "Cut & Sew",
|
||||
sublimation: "Sublimation",
|
||||
heattransfer: "Transferdruck / Vinyl",
|
||||
garmentdye: "Stückfärbung",
|
||||
knit: "Strickwaren",
|
||||
patchwork: "Patchwork",
|
||||
allover: "All-over-Druck",
|
||||
},
|
||||
material: {
|
||||
cotton: "Baumwolle",
|
||||
heavyweight: "Heavyweight",
|
||||
organic: "Bio / nachhaltig",
|
||||
fleece: "Fleece",
|
||||
denim: "Denim",
|
||||
canvas: "Canvas",
|
||||
nylon: "Nylon / technisch",
|
||||
wool: "Merino / Wolle",
|
||||
leather: "Leder",
|
||||
recycled: "Recycelt / Deadstock",
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: "Kleidungsdesigner werden - SkateSpots",
|
||||
seoDescription: "Individuelle Kleidung, Team-Kits und Apparel für die Szene.",
|
||||
heading: "Kleidungsdesigner",
|
||||
tagline: "Individuelle Kleidung, Team-Kits und Apparel für die Szene",
|
||||
noun: "Kleidungsdesigner",
|
||||
rateLabel: "Preis",
|
||||
portfolioLabel: "Shop- / Portfolio-Link",
|
||||
sectionWhatYouMake: "Was du machst",
|
||||
sectionHowYouMake: "Wie du es machst",
|
||||
sectionMaterials: "Materialien",
|
||||
minimumPlaceholder: "z. B. 10 Stück",
|
||||
turnaroundPlaceholder: "z. B. 2–3 Wochen",
|
||||
sizingPlaceholder: "z. B. XS-3XL / Maßanfertigung",
|
||||
samplesHelper: "Bietest du Muster oder Prototypen vor einer vollen Produktion an?",
|
||||
customizationPlaceholder: "z. B. Namen, Nummern, Grafiken",
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: "Aktualisiert",
|
||||
refresh: "Aktualisieren",
|
||||
unavailable: "Wetter nicht verfügbar.",
|
||||
retry: "Erneut versuchen",
|
||||
sunrise: "Sonnenaufgang",
|
||||
sunset: "Sonnenuntergang",
|
||||
legendTitle: "Wetterwert",
|
||||
legendWeatherOnly: "Nur Wetter",
|
||||
},
|
||||
cordnUi: {
|
||||
title: "Privater Chat",
|
||||
subtitle: "Ende-zu-Ende-verschlüsselt (MLS) zwischen den Crew-Mitgliedern. Der Koordinator leitet nur Chiffretext und Metadaten weiter – er sieht nie den Inhalt der Nachrichten.",
|
||||
notLoggedIn: "Melde dich an, um den privaten Chat der Crew zu nutzen.",
|
||||
membersOnly: "Nur Crew-Mitglieder können den privaten Chat öffnen.",
|
||||
connecting: "Verbinden…",
|
||||
noCoordinator: "Für diese Crew ist noch kein Koordinator konfiguriert.",
|
||||
noGroupAdmin: "Der private Chat dieser Crew wurde noch nicht erstellt.",
|
||||
noGroupMember: "Du bist noch nicht im privaten Chat dieser Crew.",
|
||||
create: "Privaten Chat erstellen",
|
||||
requestJoin: "Um Beitritt bitten",
|
||||
checkInvite: "Nach Einladung suchen",
|
||||
requested: "Anfrage gesendet – ein Crew-Admin wird sie genehmigen.",
|
||||
noInvite: "Noch keine Einladung. Bitte einen Admin, deine Anfrage zu genehmigen.",
|
||||
placeholder: "Nachricht an die Crew…",
|
||||
send: "Senden",
|
||||
refresh: "Aktualisieren",
|
||||
requests: "Beitrittsanfragen",
|
||||
checkRequests: "Anfragen prüfen",
|
||||
approve: "Hinzufügen",
|
||||
noRequests: "Keine offenen Beitrittsanfragen.",
|
||||
inviteHint: "Bisher bist nur du in diesem Chat – Crew-Mitglieder können auf „Um Beitritt bitten“ tippen, dann genehmigst du sie hier.",
|
||||
memberCount: "{{count}} in der Gruppe",
|
||||
you: "Du",
|
||||
groupRef: "Gruppenlink",
|
||||
copyRef: "Kopieren",
|
||||
copied: "Kopiert",
|
||||
attachImage: "Bild anhängen",
|
||||
uploading: "Wird hochgeladen…",
|
||||
uploadFailed: "Das Bild konnte nicht hochgeladen werden.",
|
||||
bannerTitle: "Diese Crew hat noch keinen privaten Chat",
|
||||
bannerBody: "Richte einen Ende-zu-Ende-verschlüsselten (MLS) Chat für deine Crew ein – Mitglieder treten über den Tab bei.",
|
||||
bannerCta: "Einrichten",
|
||||
ready: "Verbunden · MLS",
|
||||
errorPrefix: "Koordinator konnte nicht erreicht werden",
|
||||
interactiveHint: "Dein Signer fragt bei jeder Aktion nach Bestätigung – nutze Aktualisieren und Senden nach Bedarf.",
|
||||
},
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,12 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
/**
|
||||
* de translations — composed from fragments. Partial: missing keys fall
|
||||
* back to English; `check-i18n.mjs` reports coverage.
|
||||
*/
|
||||
const de = {
|
||||
const de = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -20,6 +19,8 @@ const de = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default de;
|
||||
|
|
|
|||
23
src/i18n/deepMerge.ts
Normal file
23
src/i18n/deepMerge.ts
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
type TranslationDict = { [key: string]: string | TranslationDict };
|
||||
|
||||
/**
|
||||
* Recursively merge `extra` into `base`, so a partial fragment ADDS keys into
|
||||
* existing namespaces instead of replacing them. A shallow spread would clobber a
|
||||
* whole namespace (e.g. `...drift` last would drop every other `socialUi` key).
|
||||
* Plain nested string dictionaries only.
|
||||
*/
|
||||
export function deepMerge<T extends TranslationDict>(base: T, extra: TranslationDict): T {
|
||||
const out: TranslationDict = { ...base };
|
||||
for (const [key, value] of Object.entries(extra)) {
|
||||
const current = out[key];
|
||||
if (
|
||||
value && typeof value === 'object' && !Array.isArray(value) &&
|
||||
current && typeof current === 'object' && !Array.isArray(current)
|
||||
) {
|
||||
out[key] = deepMerge(current as TranslationDict, value as TranslationDict);
|
||||
} else {
|
||||
out[key] = value;
|
||||
}
|
||||
}
|
||||
return out as T;
|
||||
}
|
||||
323
src/i18n/el/drift.ts
Normal file
323
src/i18n/el/drift.ts
Normal file
|
|
@ -0,0 +1,323 @@
|
|||
/**
|
||||
* el — translation drift fragment.
|
||||
*
|
||||
* The keys added to `en` after the original batch pass. Kept in their own
|
||||
* module so this pass never touches the batch files. Composed into `el` in
|
||||
* `index.ts` via a deep merge (a shallow spread would clobber the sibling
|
||||
* keys already present in the batches, e.g. `socialUi`, `walletUi`).
|
||||
*/
|
||||
const drift = {
|
||||
nav: {
|
||||
searchLanguages: "Αναζήτηση γλωσσών...",
|
||||
noLanguages: "Δεν βρέθηκαν γλώσσες",
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: "Τοποθεσίες",
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: "Ξεκίνα",
|
||||
firstRunAddSpot: "Πρόσθεσε το πρώτο spot",
|
||||
firstRunJoinCrew: "Μπες σε ένα crew",
|
||||
firstRunStartCrew: "Ξεκίνα το δικό σου crew",
|
||||
firstRunWallet: "Στήσε το πορτοφόλι σου",
|
||||
forecastDays: "Πρόγνωση {{count}} ημερών",
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: "Πρόγνωση {{count}} ημερών",
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: "ανακτήθηκε",
|
||||
stateVerifying: "επαλήθευση",
|
||||
},
|
||||
loadFailed: "Δεν ήταν δυνατή η πρόσβαση στα relay. Έλεγξε τη σύνδεσή σου και δοκίμασε ξανά.",
|
||||
statusPending: "σε εκκρεμότητα",
|
||||
offers: {
|
||||
closeDeal: "Κλείσιμο συμφωνίας",
|
||||
loadFailed: "Δεν ήταν δυνατή η φόρτωση των προσφορών. Έλεγξε τη σύνδεσή σου και δοκίμασε ξανά.",
|
||||
},
|
||||
pay: {
|
||||
nonSats: "Αυτή η προσφορά έχει τιμή σε {{currency}}. Η πληρωμή εντός εφαρμογής γίνεται μόνο σε sats. Τακτοποίησε απευθείας με τον πωλητή.",
|
||||
unsupported: "Αυτός ο κωδικός πληρωμής (αίτημα Cashu) δεν υποστηρίζεται ακόμη. Ζήτα από τον πωλητή ένα Lightning invoice ή διεύθυνση.",
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: "Τα χρήματα είναι κλειδωμένα σε escrow και αποθηκευμένα σε αυτή τη συσκευή, αλλά το αίτημα δεν στάλθηκε. Άνοιξε ξανά την καταχώριση για επανάληψη. Μην πληρώσεις ξανά.",
|
||||
mintLabel: "Mint (όπου είναι κλειδωμένα τα χρήματα)",
|
||||
sellerMintHint: "Ο πωλητής προτιμά αυτό το mint· τα χρήματα που κλειδώνονται εδώ είναι τα πιο εύκολα να τα εξαργυρώσει.",
|
||||
mintHint: "Το escrow βρίσκεται σε αυτό το mint. Ο πωλητής εξαργυρώνει εδώ, οπότε διάλεξε ένα που εμπιστεύεστε και οι δύο.",
|
||||
noMints: "Δεν υπάρχουν διαθέσιμα mint",
|
||||
p2pkUnsupported: "Αυτό το mint δεν διαφημίζει υποστήριξη P2PK (NUT-11), οπότε το escrow δεν μπορεί να κλειδωθεί εδώ. Διάλεξε άλλο mint.",
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: "Πρόσφερε ρούχα",
|
||||
tabClothing: "Ρούχα",
|
||||
empty: {
|
||||
clothingTitle: "Δεν υπάρχουν σχεδιαστές ρούχων ακόμη",
|
||||
clothingBody: "Γίνε ο πρώτος που προσφέρει custom ρούχα, ομαδικά kits και ένδυση για τη σκηνή.",
|
||||
},
|
||||
craftFields: {
|
||||
sizing: "Εύρος μεγεθών",
|
||||
samples: "Δείγματα / πρωτότυπα",
|
||||
customization: "Προσαρμογή",
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: "Συντονιστής SkateSpots",
|
||||
ourDefaultDesc: "Το SkateSpots τρέχει έναν συντονιστή στο relay.skate-spots.org. Χρησιμοποίησέ τον προεπιλεγμένα ή τρέξε τον δικό σου — ένας συντονιστής βλέπει μόνο κρυπτογραφημένα δεδομένα και metadata, ποτέ τα μηνύματά σου.",
|
||||
useOurs: "Χρήση του συντονιστή SkateSpots",
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: "Κρυπτογραφημένη συνομιλία",
|
||||
privateChatName: "Ιδιωτική συνομιλία",
|
||||
privateChatDesc: "Ομαδική συνομιλία με forward secrecy (MLS) μέσω συντονιστή.",
|
||||
privateChatDescFull: "Η ιδιωτική συνομιλία δημιουργείται μία φορά από έναν διαχειριστή και μετά τα μέλη μπαίνουν.",
|
||||
chatRowDesc: "Όλοι στο crew — σφραγισμένο με το κλειδί κάθε μέλους (NIP-17).",
|
||||
openChat: "Άνοιγμα",
|
||||
setUpChat: "Ρύθμιση",
|
||||
joinChat: "Συμμετοχή",
|
||||
checking: "Έλεγχος…",
|
||||
openInAnotherApp: "Άνοιγμα σε άλλη εφαρμογή",
|
||||
openInCordnWeb: "Cordn (web)",
|
||||
openCordnGroup: "Άνοιγμα συνομιλίας crew",
|
||||
copyForStaircase: "Αντιγραφή για Staircase",
|
||||
},
|
||||
dms: {
|
||||
refresh: "Ανανέωση",
|
||||
crews: "Crews",
|
||||
crewFounder: "Ιδρυτής",
|
||||
crewMember: "Μέλος",
|
||||
crewOpen: "Άνοιγμα",
|
||||
crewSetUp: "Ρύθμιση",
|
||||
},
|
||||
form: {
|
||||
cordnGroup: "Ομάδα Cordn",
|
||||
cordnGroupHint: "Προαιρετικό: επικόλλησε τον σύνδεσμο της ομάδας από Staircase ή Cordn web. Το crew σου αποκτά τότε πραγματική end-to-end συνομιλία MLS, φιλοξενούμενη στον συντονιστή μας.",
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: "Εμπιστοσύνη",
|
||||
trustSub: "Πηγές και εμφάνιση",
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: "Σίγαση",
|
||||
muted: "Σε σίγαση",
|
||||
mutedDesc: "Δεν θα βλέπεις το περιεχόμενό τους.",
|
||||
muteFailed: "Δεν ήταν δυνατή η σίγαση. Δοκίμασε ξανά.",
|
||||
loginToMute: "Συνδέσου για σίγαση.",
|
||||
attributedNetwork: "Από άτομα στο δίκτυό σου",
|
||||
attributedProviderHouse: "Από τον community πάροχο εμπιστοσύνης",
|
||||
attributedProviderCustom: "Από τον πάροχο που διάλεξες",
|
||||
howItWorks: "Πώς λειτουργεί η εμπιστοσύνη",
|
||||
flaggedNoticeTitle: "Αναφέρθηκε από έμπιστους skaters",
|
||||
flaggedNoticeDesc: "Πρόσεχε. Έμπιστα άτομα στο δίκτυο έχουν αναφέρει αυτόν τον λογαριασμό.",
|
||||
flaggedReporterFollow: "{{count}} από αυτούς που ακολουθείς",
|
||||
flaggedReporterNetwork: "{{count}} στο δίκτυό σου",
|
||||
flaggedReporterOther: "{{count}} άλλοι λογαριασμοί",
|
||||
flaggedReport: "Αναφορά",
|
||||
flaggedDismiss: "Απόρριψη",
|
||||
bucketVerified: "Επαληθευμένο",
|
||||
bucketUnknown: "Άγνωστο",
|
||||
bucketFlagged: "Επισημασμένο",
|
||||
bucketVerifiedDesc: "Κάποιος στο δίκτυό σου εγγυάται για αυτόν τον λογαριασμό.",
|
||||
bucketUnknownDesc: "Κανείς στο δίκτυό σου δεν έχει εγγυηθεί ακόμη για αυτόν τον λογαριασμό.",
|
||||
bucketFlaggedDesc: "Έμπιστα άτομα ανέφεραν αυτόν τον λογαριασμό.",
|
||||
reportedByTrusted: "Αναφέρθηκε από {{count}} έμπιστα άτομα",
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: "Ειδοποιήσεις δικτύου",
|
||||
alertsDesc: "Λογαριασμοί που ακολουθείς και τους οποίους ανέφεραν ή έβαλαν σε σίγαση έμπιστα άτομα.",
|
||||
alertsEmpty: "Δεν υπάρχουν ειδοποιήσεις. Ελέγχουμε τους λογαριασμούς που ακολουθείς για αναφορές από έμπιστα άτομα.",
|
||||
alertsReported: "Αναφέρθηκε από {{count}} έμπιστα άτομα",
|
||||
alertsMuted: "Σε σίγαση από {{count}} έμπιστα άτομα",
|
||||
alertsIgnore: "Αγνόηση",
|
||||
alertsUnfollow: "Διακοπή παρακολούθησης",
|
||||
alertsLogin: "Συνδέσου για να βλέπεις ειδοποιήσεις για τους λογαριασμούς που ακολουθείς.",
|
||||
providerTitle: "Πάροχος",
|
||||
providerDesc: "Οι βαθμολογίες προέρχονται από έναν πάροχο που διαλέγεις. Ο community πάροχος είναι ο προεπιλεγμένος.",
|
||||
useCommunity: "Χρήση community παρόχου",
|
||||
setProvider: "Όρισε πάροχο",
|
||||
customPubkeyPlaceholder: "npub ή hex δημόσιο κλειδί παρόχου",
|
||||
customRelayPlaceholder: "wss://relay.example.com",
|
||||
invalidProvider: "Εισάγετε ένα έγκυρο npub ή 64-χαρακτήρων hex δημόσιο κλειδί, και ένα relay wss://.",
|
||||
publishFailed: "Δεν ήταν δυνατή η δημοσίευση του παρόχου. Δοκίμασε ξανά.",
|
||||
providerSaved: "Ο πάροχος ενημερώθηκε.",
|
||||
loggedOutProvider: "Συνδέσου για να διαλέξεις πάροχο.",
|
||||
showMarks: "Εμφάνιση σημαδιών εμπιστοσύνης",
|
||||
showMarksDesc: "Επαληθευμένα και άγνωστα σημάδια. Οι αναφορές εμφανίζονται πάντα.",
|
||||
sourceLabel: "Πηγή",
|
||||
sourceHouse: "Community πάροχος εμπιστοσύνης",
|
||||
sourceCustom: "Ο πάροχός σου",
|
||||
loggedOut: "Συνδέσου για να διαλέξεις τον δικό σου πάροχο εμπιστοσύνης.",
|
||||
seoTitle: "Πώς λειτουργεί η εμπιστοσύνη",
|
||||
seoDescription: "Πώς το SkateSpots δείχνει την εμπιστοσύνη: τρεις καταστάσεις, από πού προέρχονται οι βαθμολογίες, και γιατί η απουσία δεν είναι δυσπιστία.",
|
||||
title: "Πώς λειτουργεί η εμπιστοσύνη",
|
||||
intro: "Η εμπιστοσύνη εδώ είναι σήμα, όχι ετυμηγορία. Προέρχεται από αυτούς που ξέρεις ή από έναν πάροχο που διαλέγεις. Δεν κατατάσσουμε ανθρώπους παγκοσμίως.",
|
||||
statesTitle: "Τρεις καταστάσεις",
|
||||
verifiedTitle: "Επαληθευμένο",
|
||||
verifiedDesc: "Κάποιος στο δίκτυό σου εγγυάται για αυτόν τον λογαριασμό: ένας φίλος φίλου ή ο πάροχος που διάλεξες.",
|
||||
unknownTitle: "Άγνωστο",
|
||||
unknownDesc: "Κανείς δεν έχει εγγυηθεί ακόμη. Από εδώ ξεκινά κάθε νέος λογαριασμός.",
|
||||
flaggedTitle: "Επισημασμένο",
|
||||
flaggedDesc: "Έμπιστα άτομα ανέφεραν αυτόν τον λογαριασμό. Είναι προειδοποίηση να κοιτάξεις πιο κοντά, όχι απόδειξη κάτι.",
|
||||
absenceTitle: "Κανένα σημάδι δεν σημαίνει δυσπιστία",
|
||||
absenceDesc: "Οι περισσότεροι λογαριασμοί δεν δείχνουν τίποτα. Αυτό σημαίνει ότι κανείς στο δίκτυό σου δεν έχει εγγυηθεί ακόμη για αυτούς, όχι ότι κάτι είναι λάθος. Ποτέ μην εκλαμβάνεις ένα απόν σημάδι ως αρνητικό.",
|
||||
sourceTitle: "Ποιος το υπολογίζει",
|
||||
sourceDesc: "Από προεπιλογή χρησιμοποιούμε το δικό σου δίκτυο. Μπορείς επίσης να διαλέξεις έναν πάροχο εμπιστοσύνης που δημοσιεύει υπογεγραμμένες βαθμολογίες μέσω Nostr (NIP-85), ή να κλείσεις την εμφάνιση. Το Επισημασμένο εμφανίζεται πάντα, γιατί είναι σήμα ασφάλειας.",
|
||||
endorsementTitle: "Η παρουσία δεν είναι έγκριση",
|
||||
endorsementDesc: "Ένα επαληθευμένο σημάδι σημαίνει ότι κάποιος εγγυήθηκε, όχι ότι το άτομο είναι καλό. Μια επισήμανση σημαίνει ότι έμπιστα άτομα το ανέφεραν, όχι ότι είναι ένοχο. Έλεγξε τις λεπτομέρειες πριν αποφασίσεις.",
|
||||
povTitle: "Εξαρτάται από την οπτική γωνία",
|
||||
povDesc: "Μια βαθμολογία είναι σχετική με το ποιος κοιτάζει. Μια κατάταξη από έναν πάροχο ή ένα άτομο δεν συγκρίνεται με άλλη, και ποτέ δεν την παρουσιάζουμε ως αντικειμενικό γεγονός.",
|
||||
settingsCta: "Διαχείριση στις Ρυθμίσεις",
|
||||
},
|
||||
marketTerms: {
|
||||
link: "Οδηγίες αγοράς",
|
||||
seoTitle: "Οδηγίες αγοράς",
|
||||
seoDescription: "Πώς λειτουργούν οι καταχωρίσεις εξοπλισμού στο SkateSpots: peer-to-peer, buyer beware, και οι κανόνες.",
|
||||
title: "Οδηγίες αγοράς",
|
||||
intro: "Το SkateSpots είναι ένας peer-to-peer πίνακας εξοπλισμού. Συναλλάσσεσαι απευθείας με το άλλο άτομο: δεν κρατάμε χρήματα, δεν στέλνουμε αντικείμενα, δεν λύνουμε διαφορές.",
|
||||
howTitle: "Πώς λειτουργεί",
|
||||
howBody: "Καταχώρισε εξοπλισμό, επικοινώνησε με τον πωλητή σε ιδιωτικό μήνυμα, και τακτοποίησε απευθείας (μετρητά, Lightning ή ανταλλαγή). Δεν υπάρχει καλάθι ή checkout.",
|
||||
rulesTitle: "Τι δεν επιτρέπεται",
|
||||
rulesBody: "Κανένα παράνομο, επικίνδυνο ή ενήλικο περιεχόμενο· κανένα ναρκωτικό, όπλο, προϊόν απομίμησης ή κλεμμένο. Κράτα τις καταχωρίσεις για skate εξοπλισμό και σχετικά αντικείμενα.",
|
||||
respectTitle: "Να σέβεσαι",
|
||||
respectBody: "Καμία κακοποίηση, παρενόχληση, απειλή ή μίσος. Οι συντονιστές μπορούν να κρύψουν καταχωρίσεις ή λογαριασμούς.",
|
||||
trustTitle: "Η εμπιστοσύνη είναι οδηγός, όχι εγγύηση",
|
||||
trustBody: "Τα σημάδια επαλήθευσης και η φήμη συναλλαγών είναι σήματα από το δίκτυο, όχι υποσχέσεις. Κάνε τους δικούς σου ελέγχους πριν συναλλαγείς.",
|
||||
trustLink: "Πώς λειτουργεί η εμπιστοσύνη",
|
||||
privacyLink: "Τι φεύγει από τη συσκευή σου",
|
||||
safetyTitle: "Συναλλάξου με ασφάλεια",
|
||||
safetyBody: "Συναντήσου σε δημόσιο χώρο για παραδόσεις, χρησιμοποίησε escrow ή προκαταβολή καλής πίστης για αποστολές, και μη στέλνεις ποτέ χρήματα εκτός εφαρμογής.",
|
||||
moderationTitle: "Η εποπτεία είναι ήπια και αναστρέψιμη",
|
||||
moderationBody: "Το κρυμμένο περιεχόμενο παραμένει στα relay και μπορεί να αποκατασταθεί· οι διαφορές μεταξύ ατόμων είναι δικές σου.",
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: "T-Shirts",
|
||||
hoodies: "Hoodies & Sweats",
|
||||
pants: "Παντελόνια & Σορτς",
|
||||
jackets: "Μπουφάν & Εξωτερικά",
|
||||
kits: "Ομαδικά kits & Jerseys",
|
||||
caps: "Καπέλα & Σκούφοι",
|
||||
socks: "Κάλτσες",
|
||||
accessories: "Τσάντες & Αξεσουάρ",
|
||||
footwear: "Υπόδηση & Παπούτσια",
|
||||
patches: "Patches & Appliqué",
|
||||
griptape: "Griptape & Ένδυση σανίδας",
|
||||
onepiece: "Ένα-και-μοναδικό / Upcycled",
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: "Custom t-shirts και τοπ",
|
||||
hoodies: "Hoodies, φούτερ και φόρμες",
|
||||
pants: "Παντελόνια εργασίας, cargo και σορτς",
|
||||
jackets: "Coach jackets, shells και μπουφάν εργασίας",
|
||||
kits: "Ομαδικά kits, jerseys και στολές",
|
||||
caps: "Καπέλα, σκούφοι και καλύμματα κεφαλής",
|
||||
socks: "Κάλτσες crew και πλεκτά",
|
||||
accessories: "Τσάντες, ζώνες και μικροαντικείμενα",
|
||||
footwear: "Custom παπούτσια και υπόδηση",
|
||||
patches: "Κεντημένα patches και appliqué",
|
||||
griptape: "Τέχνη griptape και ένδυση σανίδας",
|
||||
onepiece: "Μεμονωμένα κομμάτια και upcycled ενδύματα",
|
||||
},
|
||||
method: {
|
||||
screenprint: "Μεταξοτυπία",
|
||||
dtg: "DTG / Direct-to-Garment",
|
||||
embroidery: "Κέντημα",
|
||||
cutsew: "Cut & Sew",
|
||||
sublimation: "Εξάχνωση",
|
||||
heattransfer: "Θερμομεταφορά / Βινύλιο",
|
||||
garmentdye: "Βαφή ενδυμάτων",
|
||||
knit: "Πλεκτά",
|
||||
patchwork: "Patchwork",
|
||||
allover: "Εκτύπωση σε όλη την επιφάνεια",
|
||||
},
|
||||
material: {
|
||||
cotton: "Βαμβάκι",
|
||||
heavyweight: "Βαρύ ύφασμα",
|
||||
organic: "Οργανικό / Βιώσιμο",
|
||||
fleece: "Fleece",
|
||||
denim: "Denim",
|
||||
canvas: "Καμβάς",
|
||||
nylon: "Νάιλον / Τεχνικό",
|
||||
wool: "Merino / Μαλλί",
|
||||
leather: "Δέρμα",
|
||||
recycled: "Ανακυκλωμένο / Deadstock",
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: "Γίνε Σχεδιαστής Ρούχων - SkateSpots",
|
||||
seoDescription: "Custom ρούχα, ομαδικά kits & ένδυση για τη σκηνή.",
|
||||
heading: "Σχεδιαστής Ρούχων",
|
||||
tagline: "Custom ρούχα, ομαδικά kits & ένδυση για τη σκηνή",
|
||||
noun: "σχεδιαστής ρούχων",
|
||||
rateLabel: "Χρέωση",
|
||||
portfolioLabel: "Σύνδεσμος καταστήματος / portfolio",
|
||||
sectionWhatYouMake: "Τι φτιάχνεις",
|
||||
sectionHowYouMake: "Πώς το φτιάχνεις",
|
||||
sectionMaterials: "Υλικά",
|
||||
minimumPlaceholder: "π.χ. 10 κομμάτια",
|
||||
turnaroundPlaceholder: "π.χ. 2-3 εβδομάδες",
|
||||
sizingPlaceholder: "π.χ. XS-3XL / στα μέτρα",
|
||||
samplesHelper: "Προσφέρεις δείγματα ή πρωτότυπα πριν από πλήρη παραγωγή;",
|
||||
customizationPlaceholder: "π.χ. ονόματα, νούμερα, γραφικά",
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: "Ενημερώθηκε",
|
||||
refresh: "Ανανέωση",
|
||||
unavailable: "Ο καιρός δεν είναι διαθέσιμος.",
|
||||
retry: "Επανάληψη",
|
||||
sunrise: "Ανατολή",
|
||||
sunset: "Δύση",
|
||||
legendTitle: "Βαθμολογία καιρού",
|
||||
legendWeatherOnly: "Μόνο καιρός",
|
||||
},
|
||||
cordnUi: {
|
||||
title: "Ιδιωτική συνομιλία",
|
||||
subtitle: "End-to-end κρυπτογραφημένη (MLS) μεταξύ των μελών του crew. Ο συντονιστής δρομολογεί μόνο κρυπτογραφημένα δεδομένα και metadata — δεν βλέπει ποτέ το περιεχόμενο των μηνυμάτων.",
|
||||
notLoggedIn: "Συνδέσου για να χρησιμοποιήσεις την ιδιωτική συνομιλία του crew.",
|
||||
membersOnly: "Μόνο τα μέλη του crew μπορούν να ανοίξουν την ιδιωτική συνομιλία.",
|
||||
connecting: "Σύνδεση…",
|
||||
noCoordinator: "Δεν έχει ρυθμιστεί ακόμη συντονιστής για αυτό το crew.",
|
||||
noGroupAdmin: "Η ιδιωτική συνομιλία αυτού του crew δεν έχει δημιουργηθεί ακόμη.",
|
||||
noGroupMember: "Δεν είσαι ακόμη στην ιδιωτική συνομιλία αυτού του crew.",
|
||||
create: "Δημιουργία ιδιωτικής συνομιλίας",
|
||||
requestJoin: "Ζήτα συμμετοχή",
|
||||
checkInvite: "Έλεγχος πρόσκλησης",
|
||||
requested: "Το αίτημα στάλθηκε — ένας διαχειριστής του crew θα το εγκρίνει.",
|
||||
noInvite: "Δεν περιμένει ακόμη πρόσκληση. Ζήτα από έναν διαχειριστή να εγκρίνει το αίτημά σου.",
|
||||
placeholder: "Μήνυμα στο crew…",
|
||||
send: "Αποστολή",
|
||||
refresh: "Ανανέωση",
|
||||
requests: "Αιτήματα συμμετοχής",
|
||||
checkRequests: "Έλεγχος αιτημάτων",
|
||||
approve: "Προσθήκη",
|
||||
noRequests: "Δεν υπάρχουν εκκρεμή αιτήματα συμμετοχής.",
|
||||
inviteHint: "Μόνο εσύ είσαι σε αυτή τη συνομιλία μέχρι στιγμής — τα μέλη του crew μπορούν να πατήσουν «Ζήτα συμμετοχή» και μετά να τα εγκρίνεις εδώ.",
|
||||
memberCount: "{{count}} στην ομάδα",
|
||||
you: "Εσύ",
|
||||
groupRef: "Σύνδεσμος ομάδας",
|
||||
copyRef: "Αντιγραφή",
|
||||
copied: "Αντιγράφηκε",
|
||||
attachImage: "Επισύναψη εικόνας",
|
||||
uploading: "Μεταφόρτωση…",
|
||||
uploadFailed: "Δεν ήταν δυνατή η μεταφόρτωση της εικόνας.",
|
||||
bannerTitle: "Αυτό το crew δεν έχει ακόμη ιδιωτική συνομιλία",
|
||||
bannerBody: "Στήσε end-to-end κρυπτογραφημένη (MLS) συνομιλία για το crew σου — τα μέλη μπαίνουν από την καρτέλα.",
|
||||
bannerCta: "Ρύθμιση",
|
||||
ready: "Συνδεδεμένο · MLS",
|
||||
errorPrefix: "Δεν ήταν δυνατή η πρόσβαση στον συντονιστή",
|
||||
interactiveHint: "Ο signer σου ζητά έγκριση για κάθε ενέργεια — χρησιμοποίησε Ανανέωση και Αποστολή όπως χρειάζεται.",
|
||||
},
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,8 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
const el = {
|
||||
const el = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -16,6 +19,8 @@ const el = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default el;
|
||||
|
|
|
|||
321
src/i18n/fr/drift.ts
Normal file
321
src/i18n/fr/drift.ts
Normal file
|
|
@ -0,0 +1,321 @@
|
|||
/**
|
||||
* fr — 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: "Rechercher des langues…",
|
||||
noLanguages: "Aucune langue trouvée",
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: "Lieux",
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: "Pour commencer",
|
||||
firstRunAddSpot: "Ajoutez votre premier spot",
|
||||
firstRunJoinCrew: "Rejoindre une Crew",
|
||||
firstRunStartCrew: "Lancer votre Crew",
|
||||
firstRunWallet: "Configurer votre portefeuille",
|
||||
forecastDays: "Prévisions sur {{count}} jours",
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: "Prévisions sur {{count}} jours",
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: "révoqué",
|
||||
stateVerifying: "vérification",
|
||||
},
|
||||
loadFailed: "Impossible de joindre les relays. Vérifiez votre connexion et réessayez.",
|
||||
statusPending: "en attente",
|
||||
offers: {
|
||||
closeDeal: "Clôturer l'accord",
|
||||
loadFailed: "Impossible de charger les offres. Vérifiez votre connexion et réessayez.",
|
||||
},
|
||||
pay: {
|
||||
nonSats: "Cette offre est libellée en {{currency}}. Le paiement dans l'app se fait uniquement en sats. Réglez directement avec le vendeur.",
|
||||
unsupported: "Ce code de paiement (une requête Cashu) n'est pas encore pris en charge. Demandez une facture ou une adresse Lightning au vendeur.",
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: "Les fonds sont bloqués sous séquestre et enregistrés sur cet appareil, mais la demande n'a pas été envoyée. Rouvrez l'annonce pour réessayer. Ne payez pas à nouveau.",
|
||||
mintLabel: "Mint (où les fonds sont bloqués)",
|
||||
sellerMintHint: "Le vendeur préfère ce mint ; les fonds bloqués ici sont les plus faciles à récupérer pour lui.",
|
||||
mintHint: "Le séquestre réside dans ce mint. Le vendeur y récupère les fonds, alors choisissez-en un en qui vous avez tous les deux confiance.",
|
||||
noMints: "Aucun mint disponible",
|
||||
p2pkUnsupported: "Ce mint n'annonce pas la prise en charge de P2PK (NUT-11), le séquestre ne peut donc pas y être bloqué. Choisissez un autre mint.",
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: "Proposer des vêtements",
|
||||
tabClothing: "Vêtements",
|
||||
empty: {
|
||||
clothingTitle: "Pas encore de créateurs de vêtements",
|
||||
clothingBody: "Soyez le premier à proposer des vêtements personnalisés, des kits d'équipe et des vêtements pour la scène.",
|
||||
},
|
||||
craftFields: {
|
||||
sizing: "Gamme de tailles",
|
||||
samples: "Échantillons / prototypes",
|
||||
customization: "Personnalisation",
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: "Coordinateur SkateSpots",
|
||||
ourDefaultDesc: "SkateSpots fait tourner un coordinateur sur relay.skate-spots.org. Utilisez-le par défaut, ou faites tourner le vôtre — un coordinateur ne voit jamais que du texte chiffré et des métadonnées, jamais vos messages.",
|
||||
useOurs: "Utiliser le coordinateur SkateSpots",
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: "Chat chiffré",
|
||||
privateChatName: "Chat privé",
|
||||
privateChatDesc: "Chat de groupe à confidentialité persistante (MLS) via un coordinateur.",
|
||||
privateChatDescFull: "Le chat privé est créé une fois par un admin, puis les membres le rejoignent.",
|
||||
chatRowDesc: "Tout le monde dans la Crew — scellé avec la clé de chaque membre (NIP-17).",
|
||||
openChat: "Ouvrir",
|
||||
setUpChat: "Configurer",
|
||||
joinChat: "Rejoindre",
|
||||
checking: "Vérification…",
|
||||
openInAnotherApp: "Ouvrir dans une autre app",
|
||||
openInCordnWeb: "Cordn (web)",
|
||||
openCordnGroup: "Ouvrir le chat de la Crew",
|
||||
copyForStaircase: "Copier pour Staircase",
|
||||
},
|
||||
dms: {
|
||||
refresh: "Actualiser",
|
||||
crews: "Crews",
|
||||
crewFounder: "Fondateur",
|
||||
crewMember: "Membre",
|
||||
crewOpen: "Ouvrir",
|
||||
crewSetUp: "Configurer",
|
||||
},
|
||||
form: {
|
||||
cordnGroup: "Groupe Cordn",
|
||||
cordnGroupHint: "Facultatif : collez le lien du groupe depuis Staircase ou Cordn web. Votre Crew obtient alors un vrai chat MLS de bout en bout, hébergé sur notre coordinateur.",
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: "Confiance",
|
||||
trustSub: "Sources et affichage",
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: "Masquer",
|
||||
muted: "Masqué",
|
||||
mutedDesc: "Vous ne verrez pas son contenu.",
|
||||
muteFailed: "Impossible de masquer. Réessayez.",
|
||||
loginToMute: "Connectez-vous pour masquer.",
|
||||
attributedNetwork: "De personnes de votre réseau",
|
||||
attributedProviderHouse: "Du fournisseur de confiance communautaire",
|
||||
attributedProviderCustom: "Du fournisseur que vous avez choisi",
|
||||
howItWorks: "Comment fonctionne la confiance",
|
||||
flaggedNoticeTitle: "Signalé par des skateurs de confiance",
|
||||
flaggedNoticeDesc: "Soyez prudent. Des personnes de confiance du réseau ont signalé ce compte.",
|
||||
flaggedReporterFollow: "{{count}} que vous suivez",
|
||||
flaggedReporterNetwork: "{{count}} dans votre réseau",
|
||||
flaggedReporterOther: "{{count}} autres comptes",
|
||||
flaggedReport: "Signaler",
|
||||
flaggedDismiss: "Ignorer",
|
||||
bucketVerified: "Vérifié",
|
||||
bucketUnknown: "Inconnu",
|
||||
bucketFlagged: "Signalé",
|
||||
bucketVerifiedDesc: "Quelqu'un de votre réseau se porte garant de ce compte.",
|
||||
bucketUnknownDesc: "Personne dans votre réseau ne s'est encore porté garant de ce compte.",
|
||||
bucketFlaggedDesc: "Des personnes de confiance ont signalé ce compte.",
|
||||
reportedByTrusted: "Signalé par {{count}} personnes de confiance",
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: "Alertes réseau",
|
||||
alertsDesc: "Des comptes que vous suivez et que des personnes de confiance ont signalés ou masqués.",
|
||||
alertsEmpty: "Aucune alerte. Nous vérifions les comptes que vous suivez à la recherche de signalements de confiance.",
|
||||
alertsReported: "Signalé par {{count}} personnes de confiance",
|
||||
alertsMuted: "Masqué par {{count}} personnes de confiance",
|
||||
alertsIgnore: "Ignorer",
|
||||
alertsUnfollow: "Se désabonner",
|
||||
alertsLogin: "Connectez-vous pour voir les alertes concernant les comptes que vous suivez.",
|
||||
providerTitle: "Fournisseur",
|
||||
providerDesc: "Les scores proviennent d'un fournisseur que vous choisissez. Le fournisseur communautaire est celui par défaut.",
|
||||
useCommunity: "Utiliser le fournisseur communautaire",
|
||||
setProvider: "Définir un fournisseur",
|
||||
customPubkeyPlaceholder: "npub ou clé publique hex du fournisseur",
|
||||
customRelayPlaceholder: "wss://relais.exemple.com",
|
||||
invalidProvider: "Saisissez un npub ou une clé publique hex de 64 caractères valide, et un relais wss://.",
|
||||
publishFailed: "Impossible de publier le fournisseur. Réessayez.",
|
||||
providerSaved: "Fournisseur mis à jour.",
|
||||
loggedOutProvider: "Connectez-vous pour choisir un fournisseur.",
|
||||
showMarks: "Afficher les marques de confiance",
|
||||
showMarksDesc: "Marques vérifiées et inconnues. Les signalements s'affichent toujours.",
|
||||
sourceLabel: "Source",
|
||||
sourceHouse: "Fournisseur de confiance communautaire",
|
||||
sourceCustom: "Votre fournisseur",
|
||||
loggedOut: "Connectez-vous pour choisir votre propre fournisseur de confiance.",
|
||||
seoTitle: "Comment fonctionne la confiance",
|
||||
seoDescription: "Comment SkateSpots montre la confiance : trois états, d'où viennent les scores, et pourquoi l'absence n'est pas de la défiance.",
|
||||
title: "Comment fonctionne la confiance",
|
||||
intro: "Ici, la confiance est un signal, pas un verdict. Elle vient de qui vous connaissez, ou d'un fournisseur que vous choisissez. Nous ne classons pas les gens globalement.",
|
||||
statesTitle: "Trois états",
|
||||
verifiedTitle: "Vérifié",
|
||||
verifiedDesc: "Quelqu'un de votre réseau se porte garant de ce compte : un ami d'un ami, ou le fournisseur que vous avez choisi.",
|
||||
unknownTitle: "Inconnu",
|
||||
unknownDesc: "Personne ne s'est encore porté garant. C'est là que commence chaque nouveau compte.",
|
||||
flaggedTitle: "Signalé",
|
||||
flaggedDesc: "Des personnes de confiance ont signalé ce compte. C'est un avertissement pour regarder de plus près, pas une preuve.",
|
||||
absenceTitle: "Pas de badge ne signifie pas défiance",
|
||||
absenceDesc: "La plupart des comptes n'affichent rien du tout. Cela signifie que personne de votre réseau ne s'est encore porté garant, pas que quelque chose ne va pas. Ne lisez jamais une marque absente comme un point négatif.",
|
||||
sourceTitle: "Qui le calcule",
|
||||
sourceDesc: "Par défaut, nous utilisons votre propre réseau. Vous pouvez aussi choisir un fournisseur de confiance qui publie des scores signés sur Nostr (NIP-85), ou désactiver l'affichage. Les signalements s'affichent toujours, car c'est un signal de sécurité.",
|
||||
endorsementTitle: "La présence n'est pas une approbation",
|
||||
endorsementDesc: "Une marque vérifiée signifie que quelqu'un s'est porté garant, pas que la personne est bonne. Un signalement signifie que des personnes de confiance l'ont signalée, pas qu'elle est coupable. Vérifiez les détails avant de décider.",
|
||||
povTitle: "Cela dépend du point de vue",
|
||||
povDesc: "Un score est relatif à qui regarde. Un classement d'un fournisseur ou d'une personne n'est pas comparable à un autre, et nous n'en présentons jamais un comme un fait objectif.",
|
||||
settingsCta: "Gérer dans les réglages",
|
||||
},
|
||||
marketTerms: {
|
||||
link: "Règles de la Marketplace",
|
||||
seoTitle: "Règles de la Marketplace",
|
||||
seoDescription: "Comment fonctionnent les annonces de matériel SkateSpots : entre particuliers, acheteur vigilant, et les règles.",
|
||||
title: "Règles de la Marketplace",
|
||||
intro: "SkateSpots est un tableau de matériel entre particuliers. Vous traitez directement avec l'autre personne : nous ne détenons pas les fonds, n'expédions pas les articles et ne réglons pas les litiges.",
|
||||
howTitle: "Comment ça marche",
|
||||
howBody: "Publiez du matériel, contactez le vendeur en message privé et réglez directement (espèces, Lightning ou échange). Il n'y a ni panier ni paiement.",
|
||||
rulesTitle: "Ce qui n'est pas autorisé",
|
||||
rulesBody: "Aucun contenu illégal, dangereux ou pour adultes ; pas de drogues, d'armes, de contrefaçons ou d'objets volés. Gardez les annonces liées au matériel de skate et aux articles connexes.",
|
||||
respectTitle: "Soyez respectueux",
|
||||
respectBody: "Pas d'abus, de harcèlement, de menaces ni de haine. Les modérateurs peuvent masquer des annonces ou des comptes.",
|
||||
trustTitle: "La confiance est un guide, pas une garantie",
|
||||
trustBody: "Les marques de vérification et la réputation d'échange sont des signaux du réseau, pas des promesses. Faites vos propres vérifications avant de commercer.",
|
||||
trustLink: "Comment fonctionne la confiance",
|
||||
privacyLink: "Ce qui quitte votre appareil",
|
||||
safetyTitle: "Commercez en toute sécurité",
|
||||
safetyBody: "Rencontrez-vous dans un lieu public pour les remises en main propre, utilisez le séquestre ou un dépôt de bonne foi pour les envois, et n'envoyez jamais d'argent en dehors de l'app.",
|
||||
moderationTitle: "La modération est douce et réversible",
|
||||
moderationBody: "Le contenu masqué reste sur les relays et peut être restauré ; les litiges entre personnes sont à vous de résoudre.",
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: "T-shirts",
|
||||
hoodies: "Sweats à capuche",
|
||||
pants: "Pantalons et shorts",
|
||||
jackets: "Vestes et vêtements d'extérieur",
|
||||
kits: "Kits d'équipe et maillots",
|
||||
caps: "Casquettes et bonnets",
|
||||
socks: "Chaussettes",
|
||||
accessories: "Sacs et accessoires",
|
||||
footwear: "Chaussures",
|
||||
patches: "Écussons et appliqués",
|
||||
griptape: "Vêtements griptape et deck",
|
||||
onepiece: "Pièces uniques / upcyclées",
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: "T-shirts et hauts personnalisés",
|
||||
hoodies: "Sweats à capuche, cols ras et pantalons de jogging",
|
||||
pants: "Pantalons de travail, cargos et shorts",
|
||||
jackets: "Vestes de coach, coupe-vent et vestes de travail",
|
||||
kits: "Kits d'équipe, maillots et uniformes",
|
||||
caps: "Casquettes, bonnets et couvre-chefs",
|
||||
socks: "Chaussettes d'équipe et maille",
|
||||
accessories: "Sacs, ceintures et petite maroquinerie",
|
||||
footwear: "Chaussures personnalisées",
|
||||
patches: "Écussons brodés et appliqués",
|
||||
griptape: "Art griptape et vêtements de deck",
|
||||
onepiece: "Pièces uniques et vêtements upcyclés",
|
||||
},
|
||||
method: {
|
||||
screenprint: "Sérigraphie",
|
||||
dtg: "DTG / impression directe sur textile",
|
||||
embroidery: "Broderie",
|
||||
cutsew: "Coupe et couture",
|
||||
sublimation: "Sublimation",
|
||||
heattransfer: "Transfert thermique / vinyle",
|
||||
garmentdye: "Teinture en pièce",
|
||||
knit: "Maille",
|
||||
patchwork: "Patchwork",
|
||||
allover: "Impression intégrale",
|
||||
},
|
||||
material: {
|
||||
cotton: "Coton",
|
||||
heavyweight: "Grammage épais",
|
||||
organic: "Bio / durable",
|
||||
fleece: "Polaire",
|
||||
denim: "Denim",
|
||||
canvas: "Toile",
|
||||
nylon: "Nylon / technique",
|
||||
wool: "Mérinos / laine",
|
||||
leather: "Cuir",
|
||||
recycled: "Recyclé / deadstock",
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: "Devenir créateur de vêtements - SkateSpots",
|
||||
seoDescription: "Vêtements personnalisés, kits d'équipe et apparel pour la scène.",
|
||||
heading: "Créateur de vêtements",
|
||||
tagline: "Vêtements personnalisés, kits d'équipe et apparel pour la scène",
|
||||
noun: "créateur de vêtements",
|
||||
rateLabel: "Tarif",
|
||||
portfolioLabel: "Lien boutique / portfolio",
|
||||
sectionWhatYouMake: "Ce que vous créez",
|
||||
sectionHowYouMake: "Comment vous le créez",
|
||||
sectionMaterials: "Matériaux",
|
||||
minimumPlaceholder: "ex. 10 pièces",
|
||||
turnaroundPlaceholder: "ex. 2-3 semaines",
|
||||
sizingPlaceholder: "ex. XS-3XL / sur mesure",
|
||||
samplesHelper: "Proposez-vous des échantillons ou des prototypes avant une production complète ?",
|
||||
customizationPlaceholder: "ex. noms, numéros, graphismes",
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: "Mis à jour",
|
||||
refresh: "Actualiser",
|
||||
unavailable: "Météo indisponible.",
|
||||
retry: "Réessayer",
|
||||
sunrise: "Lever du soleil",
|
||||
sunset: "Coucher du soleil",
|
||||
legendTitle: "Score météo",
|
||||
legendWeatherOnly: "Météo uniquement",
|
||||
},
|
||||
cordnUi: {
|
||||
title: "Chat privé",
|
||||
subtitle: "Chiffré de bout en bout (MLS) entre les membres de la Crew. Le coordinateur ne route que du texte chiffré et des métadonnées — il ne voit jamais le contenu des messages.",
|
||||
notLoggedIn: "Connectez-vous pour utiliser le chat privé de la Crew.",
|
||||
membersOnly: "Seuls les membres de la Crew peuvent ouvrir le chat privé.",
|
||||
connecting: "Connexion…",
|
||||
noCoordinator: "Aucun coordinateur n'est encore configuré pour cette Crew.",
|
||||
noGroupAdmin: "Le chat privé de cette Crew n'a pas encore été créé.",
|
||||
noGroupMember: "Vous n'êtes pas encore dans le chat privé de cette Crew.",
|
||||
create: "Créer le chat privé",
|
||||
requestJoin: "Demander à rejoindre",
|
||||
checkInvite: "Vérifier l'invitation",
|
||||
requested: "Demande envoyée — un admin de la Crew l'approuvera.",
|
||||
noInvite: "Aucune invitation en attente. Demandez à un admin d'approuver votre demande.",
|
||||
placeholder: "Écrire à la Crew…",
|
||||
send: "Envoyer",
|
||||
refresh: "Actualiser",
|
||||
requests: "Demandes d'adhésion",
|
||||
checkRequests: "Vérifier les demandes",
|
||||
approve: "Ajouter",
|
||||
noRequests: "Aucune demande d'adhésion en attente.",
|
||||
inviteHint: "Vous êtes seul dans ce chat pour l'instant — les membres de la Crew peuvent appuyer sur « Demander à rejoindre », puis vous les approuvez ici.",
|
||||
memberCount: "{{count}} dans le groupe",
|
||||
you: "Vous",
|
||||
groupRef: "Lien du groupe",
|
||||
copyRef: "Copier",
|
||||
copied: "Copié",
|
||||
attachImage: "Joindre une image",
|
||||
uploading: "Envoi…",
|
||||
uploadFailed: "Impossible d'envoyer l'image.",
|
||||
bannerTitle: "Cette Crew n'a pas encore de chat privé",
|
||||
bannerBody: "Configurez un chat chiffré de bout en bout (MLS) pour votre Crew — les membres rejoignent depuis l'onglet.",
|
||||
bannerCta: "Configurer",
|
||||
ready: "Connecté · MLS",
|
||||
errorPrefix: "Impossible de joindre le coordinateur",
|
||||
interactiveHint: "Votre signataire demande une approbation à chaque action — utilisez Actualiser et Envoyer au besoin.",
|
||||
},
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,12 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
/**
|
||||
* fr translations — composed from fragments. Partial: missing keys fall
|
||||
* back to English; `check-i18n.mjs` reports coverage.
|
||||
*/
|
||||
const fr = {
|
||||
const fr = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -20,6 +19,8 @@ const fr = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default fr;
|
||||
|
|
|
|||
315
src/i18n/id/drift.ts
Normal file
315
src/i18n/id/drift.ts
Normal file
|
|
@ -0,0 +1,315 @@
|
|||
const driftStrings = {
|
||||
nav: {
|
||||
searchLanguages: 'Cari bahasa...',
|
||||
noLanguages: 'Tidak ada bahasa ditemukan',
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: 'Tempat',
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: 'Mulai',
|
||||
firstRunAddSpot: 'Tambahkan spot pertamamu',
|
||||
firstRunJoinCrew: 'Gabung crew',
|
||||
firstRunStartCrew: 'Mulai crew-mu',
|
||||
firstRunWallet: 'Siapkan dompetmu',
|
||||
forecastDays: 'Prakiraan {{count}} Hari',
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: 'Prakiraan {{count}} Hari',
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: 'dicabut',
|
||||
stateVerifying: 'memverifikasi',
|
||||
},
|
||||
loadFailed: 'Tidak dapat menjangkau relay. Periksa koneksimu dan coba lagi.',
|
||||
statusPending: 'tertunda',
|
||||
offers: {
|
||||
closeDeal: 'Tutup kesepakatan',
|
||||
loadFailed: 'Tidak dapat memuat tawaran. Periksa koneksimu dan coba lagi.',
|
||||
},
|
||||
pay: {
|
||||
nonSats: 'Tawaran ini dihargai dalam {{currency}}. Pembayaran dalam aplikasi hanya sats. Selesaikan langsung dengan penjual.',
|
||||
unsupported: 'Kode pembayaran ini (permintaan Cashu) belum didukung. Minta penjual faktur Lightning atau alamat.',
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: 'Dana terkunci di escrow dan tersimpan di perangkat ini, tetapi permintaannya tidak terkirim. Buka lagi listing untuk mencoba lagi. Jangan bayar lagi.',
|
||||
mintLabel: 'Mint (tempat dana terkunci)',
|
||||
sellerMintHint: 'Penjual lebih memilih mint ini; dana yang terkunci di sini paling mudah mereka tukarkan.',
|
||||
mintHint: 'Escrow berada di mint ini. Penjual menukarkan di sini, jadi pilih yang kalian berdua percayai.',
|
||||
noMints: 'Tidak ada mint tersedia',
|
||||
p2pkUnsupported: 'Mint ini tidak mengiklankan dukungan P2PK (NUT-11), jadi escrow tidak bisa dikunci di sini. Pilih mint lain.',
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: 'Tawarkan Pakaian',
|
||||
tabClothing: 'Pakaian',
|
||||
empty: {
|
||||
clothingTitle: 'Belum ada desainer pakaian',
|
||||
clothingBody: 'Jadilah yang pertama menawarkan pakaian kustom, seragam tim, dan apparel untuk scene.',
|
||||
},
|
||||
craftFields: {
|
||||
sizing: 'Rentang Ukuran',
|
||||
samples: 'Sampel / Prototipe',
|
||||
customization: 'Kustomisasi',
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: 'Koordinator SkateSpots',
|
||||
ourDefaultDesc: 'SkateSpots menjalankan koordinator di relay.skate-spots.org. Gunakan secara default, atau jalankan milikmu sendiri — koordinator hanya pernah melihat ciphertext dan metadata, tidak pernah pesanmu.',
|
||||
useOurs: 'Gunakan koordinator SkateSpots',
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: 'Chat terenkripsi',
|
||||
privateChatName: 'Chat privat',
|
||||
privateChatDesc: 'Chat grup forward-secret (MLS) melalui koordinator.',
|
||||
privateChatDescFull: 'Chat privat dibuat sekali oleh admin, lalu anggota bergabung.',
|
||||
chatRowDesc: 'Semua orang di crew — disegel ke kunci setiap anggota (NIP-17).',
|
||||
openChat: 'Buka',
|
||||
setUpChat: 'Siapkan',
|
||||
joinChat: 'Gabung',
|
||||
checking: 'Memeriksa…',
|
||||
openInAnotherApp: 'Buka di aplikasi lain',
|
||||
openInCordnWeb: 'Cordn (web)',
|
||||
openCordnGroup: 'Buka chat crew',
|
||||
copyForStaircase: 'Salin untuk Staircase',
|
||||
},
|
||||
dms: {
|
||||
refresh: 'Muat ulang',
|
||||
crews: 'Crew',
|
||||
crewFounder: 'Pendiri',
|
||||
crewMember: 'Anggota',
|
||||
crewOpen: 'Buka',
|
||||
crewSetUp: 'Siapkan',
|
||||
},
|
||||
form: {
|
||||
cordnGroup: 'Grup Cordn',
|
||||
cordnGroupHint: 'Opsional: tempel tautan grup dari Staircase atau Cordn web. Crew-mu lalu mendapat chat MLS ujung-ke-ujung sungguhan, dihosting di koordinator kami.',
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: 'Kepercayaan',
|
||||
trustSub: 'Sumber dan tampilan',
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: 'Bisukan',
|
||||
muted: 'Dibisukan',
|
||||
mutedDesc: 'Kamu tidak akan melihat konten mereka.',
|
||||
muteFailed: 'Gagal membisukan. Coba lagi.',
|
||||
loginToMute: 'Masuk untuk membisukan.',
|
||||
attributedNetwork: 'Dari orang-orang di jaringanmu',
|
||||
attributedProviderHouse: 'Dari penyedia kepercayaan komunitas',
|
||||
attributedProviderCustom: 'Dari penyedia yang kamu pilih',
|
||||
howItWorks: 'Cara kerja kepercayaan',
|
||||
flaggedNoticeTitle: 'Dilaporkan oleh skater tepercaya',
|
||||
flaggedNoticeDesc: 'Hati-hati. Orang tepercaya di jaringan telah melaporkan akun ini.',
|
||||
flaggedReporterFollow: '{{count}} yang kamu ikuti',
|
||||
flaggedReporterNetwork: '{{count}} di jaringanmu',
|
||||
flaggedReporterOther: '{{count}} akun lain',
|
||||
flaggedReport: 'Laporkan',
|
||||
flaggedDismiss: 'Abaikan',
|
||||
bucketVerified: 'Terverifikasi',
|
||||
bucketUnknown: 'Tidak diketahui',
|
||||
bucketFlagged: 'Ditandai',
|
||||
bucketVerifiedDesc: 'Seseorang di jaringanmu menjamin akun ini.',
|
||||
bucketUnknownDesc: 'Belum ada orang di jaringanmu yang menjamin akun ini.',
|
||||
bucketFlaggedDesc: 'Orang tepercaya melaporkan akun ini.',
|
||||
reportedByTrusted: 'Dilaporkan oleh {{count}} orang tepercaya',
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: 'Peringatan jaringan',
|
||||
alertsDesc: 'Akun yang kamu ikuti yang telah dilaporkan atau dibisukan oleh orang tepercaya.',
|
||||
alertsEmpty: 'Tidak ada peringatan. Kami memeriksa akun yang kamu ikuti untuk laporan tepercaya.',
|
||||
alertsReported: 'Dilaporkan oleh {{count}} orang tepercaya',
|
||||
alertsMuted: 'Dibisukan oleh {{count}} orang tepercaya',
|
||||
alertsIgnore: 'Abaikan',
|
||||
alertsUnfollow: 'Berhenti mengikuti',
|
||||
alertsLogin: 'Masuk untuk melihat peringatan untuk akun yang kamu ikuti.',
|
||||
providerTitle: 'Penyedia',
|
||||
providerDesc: 'Skor berasal dari penyedia yang kamu pilih. Penyedia komunitas adalah default.',
|
||||
useCommunity: 'Gunakan penyedia komunitas',
|
||||
setProvider: 'Atur penyedia',
|
||||
customPubkeyPlaceholder: 'npub atau pubkey hex penyedia',
|
||||
customRelayPlaceholder: 'wss://relay.example.com',
|
||||
invalidProvider: 'Masukkan npub yang valid atau pubkey hex 64 karakter, dan relay wss://.',
|
||||
publishFailed: 'Gagal menerbitkan penyedia. Coba lagi.',
|
||||
providerSaved: 'Penyedia diperbarui.',
|
||||
loggedOutProvider: 'Masuk untuk memilih penyedia.',
|
||||
showMarks: 'Tampilkan tanda kepercayaan',
|
||||
showMarksDesc: 'Tanda terverifikasi dan tidak diketahui. Laporan selalu tampil.',
|
||||
sourceLabel: 'Sumber',
|
||||
sourceHouse: 'Penyedia kepercayaan komunitas',
|
||||
sourceCustom: 'Penyedia kamu',
|
||||
loggedOut: 'Masuk untuk memilih penyedia kepercayaanmu sendiri.',
|
||||
seoTitle: 'Cara kerja kepercayaan',
|
||||
seoDescription: 'Cara SkateSpots menampilkan kepercayaan: tiga status, dari mana skor berasal, dan mengapa ketiadaan bukan ketidakpercayaan.',
|
||||
title: 'Cara kerja kepercayaan',
|
||||
intro: 'Kepercayaan di sini adalah sinyal, bukan putusan. Ia datang dari siapa yang kamu kenal, atau dari penyedia yang kamu pilih. Kami tidak memeringkat orang secara global.',
|
||||
statesTitle: 'Tiga status',
|
||||
verifiedTitle: 'Terverifikasi',
|
||||
verifiedDesc: 'Seseorang di jaringanmu menjamin akun ini: teman dari teman, atau penyedia pilihanmu.',
|
||||
unknownTitle: 'Tidak diketahui',
|
||||
unknownDesc: 'Belum ada yang menjamin. Di sinilah setiap akun baru dimulai.',
|
||||
flaggedTitle: 'Ditandai',
|
||||
flaggedDesc: 'Orang tepercaya melaporkan akun ini. Ini peringatan untuk melihat lebih dekat, bukan bukti apa pun.',
|
||||
absenceTitle: 'Tanpa lencana bukan berarti tidak dipercaya',
|
||||
absenceDesc: 'Sebagian besar akun tidak menampilkan apa pun. Itu berarti belum ada orang di jaringanmu yang menjamin mereka, bukan berarti ada yang salah. Jangan pernah membaca tanda yang hilang sebagai hal negatif.',
|
||||
sourceTitle: 'Siapa yang menghitungnya',
|
||||
sourceDesc: 'Secara default kami menggunakan jaringanmu sendiri. Kamu juga bisa memilih penyedia kepercayaan yang menerbitkan skor bertanda tangan lewat Nostr (NIP-85), atau mematikan tampilannya. Ditandai selalu tampil, karena itu sinyal keselamatan.',
|
||||
endorsementTitle: 'Kehadiran bukan dukungan',
|
||||
endorsementDesc: 'Tanda terverifikasi berarti seseorang menjamin, bukan bahwa orangnya baik. Tanda berarti orang tepercaya melaporkannya, bukan bahwa ia bersalah. Periksa detailnya sebelum kamu memutuskan.',
|
||||
povTitle: 'Tergantung sudut pandang',
|
||||
povDesc: 'Skor bersifat relatif terhadap siapa yang melihat. Peringkat dari satu penyedia atau satu orang tidak bisa dibandingkan dengan yang lain, dan kami tidak pernah menyajikannya sebagai fakta objektif.',
|
||||
settingsCta: 'Kelola di Pengaturan',
|
||||
},
|
||||
marketTerms: {
|
||||
link: 'Panduan marketplace',
|
||||
seoTitle: 'Panduan marketplace',
|
||||
seoDescription: 'Cara listing gear SkateSpots bekerja: peer-to-peer, pembeli waspada, dan aturannya.',
|
||||
title: 'Panduan marketplace',
|
||||
intro: 'SkateSpots adalah papan gear peer-to-peer. Kamu berurusan langsung dengan orang lain: kami tidak menahan dana, mengirim barang, atau menyelesaikan sengketa.',
|
||||
howTitle: 'Cara kerjanya',
|
||||
howBody: 'Pasang gear, hubungi penjual lewat pesan privat, dan selesaikan langsung (tunai, Lightning, atau tukar). Tidak ada keranjang atau checkout.',
|
||||
rulesTitle: 'Yang tidak diizinkan',
|
||||
rulesBody: 'Tidak ada konten ilegal, berbahaya, atau dewasa; tidak ada narkoba, senjata, barang palsu atau curian. Jaga listing tetap soal gear skate dan barang terkait.',
|
||||
respectTitle: 'Bersikap hormat',
|
||||
respectBody: 'Tidak ada pelecehan, gangguan, ancaman, atau kebencian. Moderator dapat menyembunyikan listing atau akun.',
|
||||
trustTitle: 'Kepercayaan adalah panduan, bukan jaminan',
|
||||
trustBody: 'Tanda verifikasi dan reputasi dagang adalah sinyal dari jaringan, bukan janji. Lakukan pemeriksaanmu sendiri sebelum bertransaksi.',
|
||||
trustLink: 'Cara kerja kepercayaan',
|
||||
privacyLink: 'Apa yang keluar dari perangkatmu',
|
||||
safetyTitle: 'Berdagang dengan aman',
|
||||
safetyBody: 'Bertemu di tempat umum untuk serah terima, gunakan escrow atau uang muka itikad baik untuk transaksi kiriman, dan jangan pernah mengirim uang di luar aplikasi.',
|
||||
moderationTitle: 'Moderasi lembut dan dapat dibalik',
|
||||
moderationBody: 'Konten yang disembunyikan tetap ada di relay dan bisa dipulihkan; sengketa antar orang adalah urusanmu untuk diselesaikan.',
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: 'Kaos',
|
||||
hoodies: 'Hoodie & Sweater',
|
||||
pants: 'Celana & Celana Pendek',
|
||||
jackets: 'Jaket & Pakaian Luar',
|
||||
kits: 'Seragam Tim & Jersey',
|
||||
caps: 'Topi & Beanie',
|
||||
socks: 'Kaus Kaki',
|
||||
accessories: 'Tas & Aksesori',
|
||||
footwear: 'Alas Kaki & Sepatu',
|
||||
patches: 'Tambalan & Aplikasi',
|
||||
griptape: 'Seni Griptape & Apparel Deck',
|
||||
onepiece: 'Satu-satunya / Upcycled',
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: 'Kaos dan atasan kustom',
|
||||
hoodies: 'Hoodie, crew, dan celana training',
|
||||
pants: 'Celana kerja, cargo, dan celana pendek',
|
||||
jackets: 'Jaket coach, shell, dan jaket kerja',
|
||||
kits: 'Seragam tim, jersey, dan uniform',
|
||||
caps: 'Topi, beanie, dan penutup kepala',
|
||||
socks: 'Kaus kaki crew dan rajutan',
|
||||
accessories: 'Tas, ikat pinggang, dan barang kecil',
|
||||
footwear: 'Sepatu kustom dan alas kaki',
|
||||
patches: 'Tambalan bordir dan aplikasi',
|
||||
griptape: 'Seni griptape dan apparel deck',
|
||||
onepiece: 'Potongan tunggal dan pakaian upcycled',
|
||||
},
|
||||
method: {
|
||||
screenprint: 'Sablon',
|
||||
dtg: 'DTG / Direct-to-Garment',
|
||||
embroidery: 'Bordir',
|
||||
cutsew: 'Cut & Sew',
|
||||
sublimation: 'Sublimasi',
|
||||
heattransfer: 'Transfer Panas / Vinyl',
|
||||
garmentdye: 'Pewarnaan Pakaian',
|
||||
knit: 'Rajutan',
|
||||
patchwork: 'Patchwork',
|
||||
allover: 'Cetak All-over',
|
||||
},
|
||||
material: {
|
||||
cotton: 'Katun',
|
||||
heavyweight: 'Heavyweight',
|
||||
organic: 'Organik / Berkelanjutan',
|
||||
fleece: 'Fleece',
|
||||
denim: 'Denim',
|
||||
canvas: 'Kanvas',
|
||||
nylon: 'Nylon / Teknis',
|
||||
wool: 'Merino / Wol',
|
||||
leather: 'Kulit',
|
||||
recycled: 'Daur Ulang / Deadstock',
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: 'Jadi Desainer Pakaian - SkateSpots',
|
||||
seoDescription: 'Pakaian kustom, seragam tim & apparel untuk scene.',
|
||||
heading: 'Desainer Pakaian',
|
||||
tagline: 'Pakaian kustom, seragam tim & apparel untuk scene',
|
||||
noun: 'desainer pakaian',
|
||||
rateLabel: 'Tarif',
|
||||
portfolioLabel: 'Tautan toko / portofolio',
|
||||
sectionWhatYouMake: 'Apa yang Kamu Buat',
|
||||
sectionHowYouMake: 'Bagaimana Kamu Membuatnya',
|
||||
sectionMaterials: 'Bahan',
|
||||
minimumPlaceholder: 'mis. 10 potong',
|
||||
turnaroundPlaceholder: 'mis. 2-3 minggu',
|
||||
sizingPlaceholder: 'mis. XS-3XL / made to measure',
|
||||
samplesHelper: 'Apakah kamu menawarkan sampel atau prototipe sebelum produksi penuh?',
|
||||
customizationPlaceholder: 'mis. nama, nomor, grafis',
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: 'Diperbarui',
|
||||
refresh: 'Muat ulang',
|
||||
unavailable: 'Cuaca tidak tersedia.',
|
||||
retry: 'Coba lagi',
|
||||
sunrise: 'Matahari terbit',
|
||||
sunset: 'Matahari terbenam',
|
||||
legendTitle: 'Skor cuaca',
|
||||
legendWeatherOnly: 'Cuaca saja',
|
||||
},
|
||||
cordnUi: {
|
||||
title: 'Chat privat',
|
||||
subtitle: 'Terenkripsi ujung-ke-ujung (MLS) antar anggota crew. Koordinator hanya merutekan ciphertext dan metadata — tidak pernah melihat isi pesan.',
|
||||
notLoggedIn: 'Masuk untuk menggunakan chat privat crew.',
|
||||
membersOnly: 'Hanya anggota crew yang bisa membuka chat privat.',
|
||||
connecting: 'Menghubungkan…',
|
||||
noCoordinator: 'Belum ada koordinator yang dikonfigurasi untuk crew ini.',
|
||||
noGroupAdmin: 'Chat privat crew ini belum dibuat.',
|
||||
noGroupMember: 'Kamu belum ada di chat privat crew ini.',
|
||||
create: 'Buat chat privat',
|
||||
requestJoin: 'Minta gabung',
|
||||
checkInvite: 'Periksa undangan',
|
||||
requested: 'Permintaan terkirim — admin crew akan menyetujuinya.',
|
||||
noInvite: 'Belum ada undangan menunggu. Minta admin menyetujui permintaanmu.',
|
||||
placeholder: 'Kirim pesan ke crew…',
|
||||
send: 'Kirim',
|
||||
refresh: 'Muat ulang',
|
||||
requests: 'Permintaan gabung',
|
||||
checkRequests: 'Periksa permintaan',
|
||||
approve: 'Tambah',
|
||||
noRequests: 'Tidak ada permintaan gabung yang tertunda.',
|
||||
inviteHint: 'Baru kamu yang ada di chat ini — anggota crew bisa menekan “Minta gabung”, lalu kamu setujui di sini.',
|
||||
memberCount: '{{count}} di grup',
|
||||
you: 'Kamu',
|
||||
groupRef: 'Tautan grup',
|
||||
copyRef: 'Salin',
|
||||
copied: 'Disalin',
|
||||
attachImage: 'Lampirkan gambar',
|
||||
uploading: 'Mengunggah…',
|
||||
uploadFailed: 'Gagal mengunggah gambar.',
|
||||
bannerTitle: 'Crew ini belum punya chat privat',
|
||||
bannerBody: 'Siapkan chat terenkripsi ujung-ke-ujung (MLS) untuk crew-mu — anggota bergabung dari tab.',
|
||||
bannerCta: 'Siapkan',
|
||||
ready: 'Terhubung · MLS',
|
||||
errorPrefix: 'Tidak dapat menjangkau koordinator',
|
||||
interactiveHint: 'Penandatanganmu meminta persetujuan untuk setiap tindakan — gunakan Muat ulang dan Kirim sesuai kebutuhan.',
|
||||
},
|
||||
};
|
||||
|
||||
export default driftStrings;
|
||||
|
|
@ -6,8 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
const id = {
|
||||
const id = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -16,6 +19,8 @@ const id = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default id;
|
||||
|
|
|
|||
321
src/i18n/it/drift.ts
Normal file
321
src/i18n/it/drift.ts
Normal file
|
|
@ -0,0 +1,321 @@
|
|||
/**
|
||||
* 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;
|
||||
|
|
@ -6,12 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
/**
|
||||
* it translations — composed from fragments. Partial: missing keys fall
|
||||
* back to English; `check-i18n.mjs` reports coverage.
|
||||
*/
|
||||
const it = {
|
||||
const it = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -20,6 +19,8 @@ const it = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default it;
|
||||
|
|
|
|||
331
src/i18n/ja/drift.ts
Normal file
331
src/i18n/ja/drift.ts
Normal file
|
|
@ -0,0 +1,331 @@
|
|||
/**
|
||||
* Japanese (日本語) — drift fragment: the keys added after the main batches.
|
||||
*
|
||||
* These were the last keys missing from this locale (nav search, the first-run
|
||||
* checklist, marketplace states/escrow copy, the clothing craft, the trust UI,
|
||||
* the marketplace guidelines, the weather legend and the native Cordn/MLS chat).
|
||||
* The default export is the nested dictionary; `index.ts` deep-merges it over
|
||||
* the composed batch fragments (a shallow spread would replace a whole namespace
|
||||
* and drop its sibling keys).
|
||||
*
|
||||
* Skate/brand vocabulary stays English or transliterated (Spot, Park, Crew,
|
||||
* Stash, The Lab, Nostr, Lightning, sats, Cashu, MLS, Cordn, Staircase), matching
|
||||
* the other batches.
|
||||
*/
|
||||
type Dict = { [key: string]: string | Dict };
|
||||
|
||||
const drift: Dict = {
|
||||
nav: {
|
||||
searchLanguages: '言語を検索...',
|
||||
noLanguages: '言語が見つかりません',
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: '場所',
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: 'はじめかた',
|
||||
firstRunAddSpot: '最初のスポットを追加',
|
||||
firstRunJoinCrew: 'クルーに参加',
|
||||
firstRunStartCrew: 'クルーを始める',
|
||||
firstRunWallet: 'ウォレットを設定',
|
||||
forecastDays: '{{count}}日間予報',
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: '{{count}}日間予報',
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: '取り消し済み',
|
||||
stateVerifying: '確認中',
|
||||
},
|
||||
loadFailed: 'リレーに接続できませんでした。接続を確認してもう一度お試しください。',
|
||||
statusPending: '保留中',
|
||||
offers: {
|
||||
closeDeal: '取引を終了',
|
||||
loadFailed: 'オファーを読み込めませんでした。接続を確認してもう一度お試しください。',
|
||||
},
|
||||
pay: {
|
||||
nonSats: 'このオファーの価格は{{currency}}です。アプリ内支払いはsatsのみです。出品者と直接精算してください。',
|
||||
unsupported: 'この支払いコード(Cashuリクエスト)はまだ対応していません。出品者にLightningインボイスまたはアドレスを依頼してください。',
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: '資金はエスクローにロックされ、このデバイスに保存されていますが、リクエストは送信されませんでした。リスティングを開き直して再試行してください。再度支払わないでください。',
|
||||
mintLabel: 'ミント(資金がロックされる場所)',
|
||||
sellerMintHint: '出品者はこのミントを希望しています。ここにロックされた資金が最も引き出しやすくなります。',
|
||||
mintHint: 'エスクローはこのミントに置かれます。出品者はここで引き出すので、双方が信頼できるものを選んでください。',
|
||||
noMints: '利用可能なミントがありません',
|
||||
p2pkUnsupported: 'このミントはP2PK(NUT-11)対応を告知していないため、ここでエスクローをロックできません。別のミントを選んでください。',
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: '服を提供',
|
||||
tabClothing: '服',
|
||||
empty: {
|
||||
clothingTitle: '服のデザイナーはまだいません',
|
||||
clothingBody: 'シーンのためのカスタム服、チームキット、アパレルを最初に提供しましょう。',
|
||||
},
|
||||
craftFields: {
|
||||
sizing: 'サイズ範囲',
|
||||
samples: 'サンプル / 試作',
|
||||
customization: 'カスタマイズ',
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: 'SkateSpotsコーディネーター',
|
||||
ourDefaultDesc: 'SkateSpotsはrelay.skate-spots.orgでコーディネーターを運営しています。デフォルトで利用するか、自分のものを運営できます。コーディネーターが見るのは暗号文とメタデータだけで、あなたのメッセージを見ることはありません。',
|
||||
useOurs: 'SkateSpotsコーディネーターを使う',
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: '暗号化チャット',
|
||||
privateChatName: 'プライベートチャット',
|
||||
privateChatDesc: 'コーディネーター経由の前方秘匿型グループチャット(MLS)。',
|
||||
privateChatDescFull: 'プライベートチャットは管理者が一度作成し、その後メンバーが参加します。',
|
||||
chatRowDesc: 'クルーの全員 — 各メンバーの鍵に封緘(NIP-17)。',
|
||||
openChat: '開く',
|
||||
setUpChat: '設定',
|
||||
joinChat: '参加',
|
||||
checking: '確認中…',
|
||||
openInAnotherApp: '別のアプリで開く',
|
||||
openInCordnWeb: 'Cordn(ウェブ)',
|
||||
openCordnGroup: 'クルーチャットを開く',
|
||||
copyForStaircase: 'Staircase用にコピー',
|
||||
},
|
||||
dms: {
|
||||
refresh: '更新',
|
||||
crews: 'クルー',
|
||||
crewFounder: '創設者',
|
||||
crewMember: 'メンバー',
|
||||
crewOpen: '開く',
|
||||
crewSetUp: '設定',
|
||||
},
|
||||
form: {
|
||||
cordnGroup: 'Cordnグループ',
|
||||
cordnGroupHint: '任意:StaircaseまたはCordnウェブからグループリンクを貼り付けてください。するとクルーに、私たちのコーディネーターでホストされる本物のエンドツーエンドMLSチャットが与えられます。',
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: '信頼',
|
||||
trustSub: 'ソースと表示',
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: 'ミュート',
|
||||
muted: 'ミュート済み',
|
||||
mutedDesc: '相手のコンテンツは表示されません。',
|
||||
muteFailed: 'ミュートできませんでした。もう一度お試しください。',
|
||||
loginToMute: 'ミュートするにはログインしてください。',
|
||||
attributedNetwork: 'あなたのネットワークの人から',
|
||||
attributedProviderHouse: 'コミュニティ信頼プロバイダーから',
|
||||
attributedProviderCustom: 'あなたが選んだプロバイダーから',
|
||||
howItWorks: '信頼の仕組み',
|
||||
flaggedNoticeTitle: '信頼できるスケーターによる報告',
|
||||
flaggedNoticeDesc: 'ご注意ください。ネットワーク内の信頼できる人々がこのアカウントを報告しています。',
|
||||
flaggedReporterFollow: 'フォロー中の{{count}}人',
|
||||
flaggedReporterNetwork: 'ネットワーク内の{{count}}人',
|
||||
flaggedReporterOther: 'その他のアカウント{{count}}件',
|
||||
flaggedReport: '報告',
|
||||
flaggedDismiss: '閉じる',
|
||||
bucketVerified: '認証済み',
|
||||
bucketUnknown: '不明',
|
||||
bucketFlagged: 'フラグ付き',
|
||||
bucketVerifiedDesc: 'あなたのネットワークの誰かがこのアカウントを保証しています。',
|
||||
bucketUnknownDesc: 'あなたのネットワークで、まだ誰もこのアカウントを保証していません。',
|
||||
bucketFlaggedDesc: '信頼できる人々がこのアカウントを報告しました。',
|
||||
reportedByTrusted: '信頼できる{{count}}人に報告されました',
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: 'ネットワーク警告',
|
||||
alertsDesc: 'あなたがフォローしていて、信頼できる人々が報告またはミュートしたアカウント。',
|
||||
alertsEmpty: '警告はありません。フォロー中のアカウントに信頼できる報告がないか確認しています。',
|
||||
alertsReported: '信頼できる{{count}}人に報告されました',
|
||||
alertsMuted: '信頼できる{{count}}人にミュートされました',
|
||||
alertsIgnore: '無視',
|
||||
alertsUnfollow: 'フォロー解除',
|
||||
alertsLogin: 'フォロー中のアカウントの警告を見るにはログインしてください。',
|
||||
providerTitle: 'プロバイダー',
|
||||
providerDesc: 'スコアはあなたが選んだプロバイダーから提供されます。デフォルトはコミュニティプロバイダーです。',
|
||||
useCommunity: 'コミュニティプロバイダーを使う',
|
||||
setProvider: 'プロバイダーを設定',
|
||||
customPubkeyPlaceholder: 'プロバイダーのnpubまたは16進pubkey',
|
||||
customRelayPlaceholder: 'wss://relay.example.com',
|
||||
invalidProvider: '有効なnpubか64文字の16進pubkey、およびwss://リレーを入力してください。',
|
||||
publishFailed: 'プロバイダーを公開できませんでした。もう一度お試しください。',
|
||||
providerSaved: 'プロバイダーを更新しました。',
|
||||
loggedOutProvider: 'プロバイダーを選ぶにはログインしてください。',
|
||||
showMarks: '信頼マークを表示',
|
||||
showMarksDesc: '認証済みと不明のマーク。報告は常に表示されます。',
|
||||
sourceLabel: 'ソース',
|
||||
sourceHouse: 'コミュニティ信頼プロバイダー',
|
||||
sourceCustom: 'あなたのプロバイダー',
|
||||
loggedOut: '独自の信頼プロバイダーを選ぶにはログインしてください。',
|
||||
seoTitle: '信頼の仕組み',
|
||||
seoDescription: 'SkateSpotsが信頼をどう表示するか:3つの状態、スコアの出所、そして不在が不信ではない理由。',
|
||||
title: '信頼の仕組み',
|
||||
intro: 'ここでの信頼は判定ではなくシグナルです。あなたが誰を知っているか、またはあなたが選んだプロバイダーから生まれます。私たちは人を世界的に順位付けしません。',
|
||||
statesTitle: '3つの状態',
|
||||
verifiedTitle: '認証済み',
|
||||
verifiedDesc: 'あなたのネットワークの誰かがこのアカウントを保証しています:友人の友人、またはあなたが選んだプロバイダー。',
|
||||
unknownTitle: '不明',
|
||||
unknownDesc: 'まだ誰も保証していません。すべての新しいアカウントはここから始まります。',
|
||||
flaggedTitle: 'フラグ付き',
|
||||
flaggedDesc: '信頼できる人々がこのアカウントを報告しました。これはよく見るべきという警告であり、何かの証明ではありません。',
|
||||
absenceTitle: 'バッジがないことは不信ではない',
|
||||
absenceDesc: 'ほとんどのアカウントは何も表示しません。それはあなたのネットワークの誰もまだ保証していないという意味で、何か問題があるという意味ではありません。マークの欠如を否定的に読まないでください。',
|
||||
sourceTitle: '誰が計算するか',
|
||||
sourceDesc: 'デフォルトではあなた自身のネットワークを使います。Nostr(NIP-85)で署名済みスコアを公開する信頼プロバイダーを選ぶことも、表示をオフにすることもできます。フラグ付きは常に表示されます。安全シグナルだからです。',
|
||||
endorsementTitle: '存在は推薦ではない',
|
||||
endorsementDesc: '認証済みマークは誰かが保証したという意味で、その人が善人だという意味ではありません。フラグは信頼できる人々が報告したという意味で、有罪という意味ではありません。判断する前に詳細を確認してください。',
|
||||
povTitle: '見る視点によって変わる',
|
||||
povDesc: 'スコアは誰が見ているかに相対的です。あるプロバイダーや一人のランクは別のものと比較できず、私たちはそれを客観的事実として提示しません。',
|
||||
settingsCta: '設定で管理',
|
||||
},
|
||||
marketTerms: {
|
||||
link: 'マーケットプレイスのガイドライン',
|
||||
seoTitle: 'マーケットプレイスのガイドライン',
|
||||
seoDescription: 'SkateSpotsのギア出品の仕組み:ピアツーピア、買い手の自己責任、そしてルール。',
|
||||
title: 'マーケットプレイスのガイドライン',
|
||||
intro: 'SkateSpotsはピアツーピアのギアボードです。取引は相手と直接行います:私たちは資金を保持せず、商品を発送せず、紛争を解決しません。',
|
||||
howTitle: '仕組み',
|
||||
howBody: 'ギアを出品し、出品者にプライベートメッセージで連絡し、直接精算します(現金、Lightning、または物々交換)。カートやチェックアウトはありません。',
|
||||
rulesTitle: '禁止事項',
|
||||
rulesBody: '違法、危険、成人向けのコンテンツは禁止です。ドラッグ、武器、偽造品や盗品も禁止です。出品はスケートギアと関連アイテムに限定してください。',
|
||||
respectTitle: '敬意を持って接する',
|
||||
respectBody: '虐待、嫌がらせ、脅迫、ヘイトは禁止です。モデレーターは出品やアカウントを非表示にできます。',
|
||||
trustTitle: '信頼は指針であり保証ではない',
|
||||
trustBody: '認証マークと取引評価はネットワークからのシグナルであり、約束ではありません。取引の前に自分で確認してください。',
|
||||
trustLink: '信頼の仕組み',
|
||||
privacyLink: 'デバイスから出るもの',
|
||||
safetyTitle: '安全に取引する',
|
||||
safetyBody: '受け渡しは公共の場で会い、発送を伴う取引にはエスクローや誠意のデポジットを使い、アプリ外にお金を送らないでください。',
|
||||
moderationTitle: 'モデレーションはソフトで可逆的',
|
||||
moderationBody: '非表示にされたコンテンツはリレーに残り、復元できます。人同士の紛争はあなた自身で解決してください。',
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: 'Tシャツ',
|
||||
hoodies: 'フーディーとスウェット',
|
||||
pants: 'パンツとショーツ',
|
||||
jackets: 'ジャケットとアウター',
|
||||
kits: 'チームキットとジャージ',
|
||||
caps: 'キャップとビーニー',
|
||||
socks: 'ソックス',
|
||||
accessories: 'バッグとアクセサリー',
|
||||
footwear: 'フットウェアとシューズ',
|
||||
patches: 'パッチとアップリケ',
|
||||
griptape: 'グリップテープとデッキアパレル',
|
||||
onepiece: '一点物 / アップサイクル',
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: 'カスタムTシャツとトップス',
|
||||
hoodies: 'フーディー、クルーネック、スウェットパンツ',
|
||||
pants: 'ワークパンツ、カーゴ、ショーツ',
|
||||
jackets: 'コーチジャケット、シェル、ワークジャケット',
|
||||
kits: 'チームキット、ジャージ、ユニフォーム',
|
||||
caps: 'キャップ、ビーニー、ヘッドウェア',
|
||||
socks: 'クルーソックスとニット',
|
||||
accessories: 'バッグ、ベルト、小物',
|
||||
footwear: 'カスタムシューズとフットウェア',
|
||||
patches: '刺繍パッチとアップリケ',
|
||||
griptape: 'グリップテープアートとデッキアパレル',
|
||||
onepiece: '単品とアップサイクル衣類',
|
||||
},
|
||||
method: {
|
||||
screenprint: 'シルクスクリーン',
|
||||
dtg: 'DTG / ダイレクト・トゥ・ガーメント',
|
||||
embroidery: '刺繍',
|
||||
cutsew: 'カットソー&ソーイング',
|
||||
sublimation: '昇華プリント',
|
||||
heattransfer: '熱転写 / ビニール',
|
||||
garmentdye: '製品染め',
|
||||
knit: 'ニット',
|
||||
patchwork: 'パッチワーク',
|
||||
allover: '総柄プリント',
|
||||
},
|
||||
material: {
|
||||
cotton: 'コットン',
|
||||
heavyweight: 'ヘビーウェイト',
|
||||
organic: 'オーガニック / サステナブル',
|
||||
fleece: 'フリース',
|
||||
denim: 'デニム',
|
||||
canvas: 'キャンバス',
|
||||
nylon: 'ナイロン / テクニカル',
|
||||
wool: 'メリノ / ウール',
|
||||
leather: 'レザー',
|
||||
recycled: 'リサイクル / デッドストック',
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: '服のデザイナーになる - SkateSpots',
|
||||
seoDescription: 'シーンのためのカスタム服、チームキット、アパレル。',
|
||||
heading: '服のデザイナー',
|
||||
tagline: 'シーンのためのカスタム服、チームキット、アパレル',
|
||||
noun: '服のデザイナー',
|
||||
rateLabel: '料金',
|
||||
portfolioLabel: 'ショップ / ポートフォリオのリンク',
|
||||
sectionWhatYouMake: '何を作るか',
|
||||
sectionHowYouMake: 'どう作るか',
|
||||
sectionMaterials: '素材',
|
||||
minimumPlaceholder: '例:10着',
|
||||
turnaroundPlaceholder: '例:2〜3週間',
|
||||
sizingPlaceholder: '例:XS〜3XL / オーダーメイド',
|
||||
samplesHelper: '本生産の前にサンプルや試作を提供しますか?',
|
||||
customizationPlaceholder: '例:名前、番号、グラフィック',
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: '更新済み',
|
||||
refresh: '更新',
|
||||
unavailable: '天気を取得できません。',
|
||||
retry: '再試行',
|
||||
sunrise: '日の出',
|
||||
sunset: '日の入り',
|
||||
legendTitle: '天気スコア',
|
||||
legendWeatherOnly: '天気のみ',
|
||||
},
|
||||
cordnUi: {
|
||||
title: 'プライベートチャット',
|
||||
subtitle: 'クルーメンバー間のエンドツーエンド暗号化(MLS)。コーディネーターは暗号文とメタデータのみをルーティングし、メッセージの内容を見ることはありません。',
|
||||
notLoggedIn: 'クルーのプライベートチャットを使うにはログインしてください。',
|
||||
membersOnly: 'クルーメンバーだけがプライベートチャットを開けます。',
|
||||
connecting: '接続中…',
|
||||
noCoordinator: 'このクルーにはまだコーディネーターが設定されていません。',
|
||||
noGroupAdmin: 'このクルーのプライベートチャットはまだ作成されていません。',
|
||||
noGroupMember: 'あなたはまだこのクルーのプライベートチャットに参加していません。',
|
||||
create: 'プライベートチャットを作成',
|
||||
requestJoin: '参加をリクエスト',
|
||||
checkInvite: '招待を確認',
|
||||
requested: 'リクエストを送信しました — クルー管理者が承認します。',
|
||||
noInvite: 'まだ招待はありません。管理者にリクエストの承認を依頼してください。',
|
||||
placeholder: 'クルーにメッセージ…',
|
||||
send: '送信',
|
||||
refresh: '更新',
|
||||
requests: '参加リクエスト',
|
||||
checkRequests: 'リクエストを確認',
|
||||
approve: '追加',
|
||||
noRequests: '保留中の参加リクエストはありません。',
|
||||
inviteHint: '今のところこのチャットにはあなただけです — クルーメンバーは「参加をリクエスト」をタップでき、あなたはここで承認します。',
|
||||
memberCount: 'グループ内 {{count}}人',
|
||||
you: 'あなた',
|
||||
groupRef: 'グループリンク',
|
||||
copyRef: 'コピー',
|
||||
copied: 'コピーしました',
|
||||
attachImage: '画像を添付',
|
||||
uploading: 'アップロード中…',
|
||||
uploadFailed: '画像をアップロードできませんでした。',
|
||||
bannerTitle: 'このクルーにはまだプライベートチャットがありません',
|
||||
bannerBody: 'クルーのためにエンドツーエンド暗号化(MLS)チャットを設定しましょう — メンバーはタブから参加します。',
|
||||
bannerCta: '設定',
|
||||
ready: '接続済み · MLS',
|
||||
errorPrefix: 'コーディネーターに接続できませんでした',
|
||||
interactiveHint: '署名者は各操作で承認を求めます — 必要に応じて更新と送信を使ってください。',
|
||||
},
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -18,16 +18,11 @@ import batch17 from './batch17';
|
|||
import batch18 from './batch18';
|
||||
import batch19 from './batch19';
|
||||
import batch20 from './batch20';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
/**
|
||||
* Japanese (日本語) translations — composed from fragments so parallel batches
|
||||
* never touch one giant file (same pattern as `i18n/th/`).
|
||||
*
|
||||
* Partial by design: any key not yet translated falls back to English, and
|
||||
* `scripts/check-i18n.mjs` reports the coverage. Add new fragments here as the
|
||||
* remaining namespaces land.
|
||||
*/
|
||||
const ja = {
|
||||
const ja = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -48,6 +43,8 @@ const ja = {
|
|||
...batch18,
|
||||
...batch19,
|
||||
...batch20,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default ja;
|
||||
|
|
|
|||
331
src/i18n/ko/drift.ts
Normal file
331
src/i18n/ko/drift.ts
Normal file
|
|
@ -0,0 +1,331 @@
|
|||
/**
|
||||
* Korean (한국어) — drift fragment: the keys added after the main batches.
|
||||
*
|
||||
* These were the last keys missing from this locale (nav search, the first-run
|
||||
* checklist, marketplace states/escrow copy, the clothing craft, the trust UI,
|
||||
* the marketplace guidelines, the weather legend and the native Cordn/MLS chat).
|
||||
* The default export is the nested dictionary; `index.ts` deep-merges it over
|
||||
* the composed batch fragments (a shallow spread would replace a whole namespace
|
||||
* and drop its sibling keys).
|
||||
*
|
||||
* Skate/brand vocabulary stays English or transliterated (Spot, Park, Crew,
|
||||
* Stash, The Lab, Nostr, Lightning, sats, Cashu, MLS, Cordn, Staircase), matching
|
||||
* the other batches.
|
||||
*/
|
||||
type Dict = { [key: string]: string | Dict };
|
||||
|
||||
const drift: Dict = {
|
||||
nav: {
|
||||
searchLanguages: '언어 검색...',
|
||||
noLanguages: '언어를 찾을 수 없음',
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: '장소',
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: '시작하기',
|
||||
firstRunAddSpot: '첫 스팟 추가',
|
||||
firstRunJoinCrew: '크루 참여',
|
||||
firstRunStartCrew: '크루 시작',
|
||||
firstRunWallet: '지갑 설정',
|
||||
forecastDays: '{{count}}일 예보',
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: '{{count}}일 예보',
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: '취소됨',
|
||||
stateVerifying: '확인 중',
|
||||
},
|
||||
loadFailed: '릴레이에 연결할 수 없습니다. 연결을 확인하고 다시 시도하세요.',
|
||||
statusPending: '대기 중',
|
||||
offers: {
|
||||
closeDeal: '거래 종료',
|
||||
loadFailed: '오퍼를 불러올 수 없습니다. 연결을 확인하고 다시 시도하세요.',
|
||||
},
|
||||
pay: {
|
||||
nonSats: '이 오퍼의 가격은 {{currency}}입니다. 앱 내 결제는 sats만 지원합니다. 판매자와 직접 정산하세요.',
|
||||
unsupported: '이 결제 코드(Cashu 요청)는 아직 지원되지 않습니다. 판매자에게 Lightning 인보이스나 주소를 요청하세요.',
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: '자금이 에스크로에 잠겨 이 기기에 저장되었지만 요청이 전송되지 않았습니다. 리스팅을 다시 열어 재시도하세요. 다시 결제하지 마세요.',
|
||||
mintLabel: '민트 (자금이 잠기는 곳)',
|
||||
sellerMintHint: '판매자가 이 민트를 선호합니다. 여기 잠긴 자금이 가장 수령하기 쉽습니다.',
|
||||
mintHint: '에스크로는 이 민트에 있습니다. 판매자가 여기서 수령하므로 둘 다 신뢰하는 민트를 고르세요.',
|
||||
noMints: '사용 가능한 민트가 없습니다',
|
||||
p2pkUnsupported: '이 민트는 P2PK(NUT-11) 지원을 알리지 않아 여기에 에스크로를 잠글 수 없습니다. 다른 민트를 선택하세요.',
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: '의류 제공',
|
||||
tabClothing: '의류',
|
||||
empty: {
|
||||
clothingTitle: '아직 의류 디자이너가 없습니다',
|
||||
clothingBody: '씬을 위한 맞춤 의류, 팀 키트, 의류를 가장 먼저 제공해 보세요.',
|
||||
},
|
||||
craftFields: {
|
||||
sizing: '사이즈 범위',
|
||||
samples: '샘플 / 시제품',
|
||||
customization: '커스터마이징',
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: 'SkateSpots 코디네이터',
|
||||
ourDefaultDesc: 'SkateSpots는 relay.skate-spots.org에서 코디네이터를 운영합니다. 기본으로 사용하거나 직접 운영하세요. 코디네이터는 암호문과 메타데이터만 보고 메시지는 절대 보지 않습니다.',
|
||||
useOurs: 'SkateSpots 코디네이터 사용',
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: '암호화 채팅',
|
||||
privateChatName: '비공개 채팅',
|
||||
privateChatDesc: '코디네이터를 통한 전방 비밀 그룹 채팅(MLS).',
|
||||
privateChatDescFull: '비공개 채팅은 관리자가 한 번 만들고, 이후 멤버가 참여합니다.',
|
||||
chatRowDesc: '크루의 모든 사람 — 각 멤버의 키로 봉인(NIP-17).',
|
||||
openChat: '열기',
|
||||
setUpChat: '설정',
|
||||
joinChat: '참여',
|
||||
checking: '확인 중…',
|
||||
openInAnotherApp: '다른 앱에서 열기',
|
||||
openInCordnWeb: 'Cordn(웹)',
|
||||
openCordnGroup: '크루 채팅 열기',
|
||||
copyForStaircase: 'Staircase용 복사',
|
||||
},
|
||||
dms: {
|
||||
refresh: '새로고침',
|
||||
crews: '크루',
|
||||
crewFounder: '창립자',
|
||||
crewMember: '멤버',
|
||||
crewOpen: '열기',
|
||||
crewSetUp: '설정',
|
||||
},
|
||||
form: {
|
||||
cordnGroup: 'Cordn 그룹',
|
||||
cordnGroupHint: '선택 사항: Staircase 또는 Cordn 웹의 그룹 링크를 붙여넣으세요. 그러면 크루가 우리 코디네이터에서 호스팅되는 실제 종단 간 MLS 채팅을 갖게 됩니다.',
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: '신뢰',
|
||||
trustSub: '출처와 표시',
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: '뮤트',
|
||||
muted: '뮤트됨',
|
||||
mutedDesc: '상대방의 콘텐츠가 표시되지 않습니다.',
|
||||
muteFailed: '뮤트하지 못했습니다. 다시 시도하세요.',
|
||||
loginToMute: '뮤트하려면 로그인하세요.',
|
||||
attributedNetwork: '당신의 네트워크에 있는 사람들로부터',
|
||||
attributedProviderHouse: '커뮤니티 신뢰 제공자로부터',
|
||||
attributedProviderCustom: '당신이 선택한 제공자로부터',
|
||||
howItWorks: '신뢰가 작동하는 방식',
|
||||
flaggedNoticeTitle: '신뢰하는 스케이터의 신고',
|
||||
flaggedNoticeDesc: '주의하세요. 네트워크의 신뢰하는 사람들이 이 계정을 신고했습니다.',
|
||||
flaggedReporterFollow: '팔로우 중인 {{count}}명',
|
||||
flaggedReporterNetwork: '네트워크의 {{count}}명',
|
||||
flaggedReporterOther: '기타 계정 {{count}}개',
|
||||
flaggedReport: '신고',
|
||||
flaggedDismiss: '닫기',
|
||||
bucketVerified: '인증됨',
|
||||
bucketUnknown: '알 수 없음',
|
||||
bucketFlagged: '플래그됨',
|
||||
bucketVerifiedDesc: '당신의 네트워크의 누군가가 이 계정을 보증합니다.',
|
||||
bucketUnknownDesc: '아직 당신의 네트워크에서 아무도 이 계정을 보증하지 않았습니다.',
|
||||
bucketFlaggedDesc: '신뢰하는 사람들이 이 계정을 신고했습니다.',
|
||||
reportedByTrusted: '신뢰하는 {{count}}명이 신고함',
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: '네트워크 경고',
|
||||
alertsDesc: '당신이 팔로우하며 신뢰하는 사람들이 신고하거나 뮤트한 계정.',
|
||||
alertsEmpty: '경고가 없습니다. 팔로우하는 계정에 신뢰 신고가 있는지 확인합니다.',
|
||||
alertsReported: '신뢰하는 {{count}}명이 신고함',
|
||||
alertsMuted: '신뢰하는 {{count}}명이 뮤트함',
|
||||
alertsIgnore: '무시',
|
||||
alertsUnfollow: '언팔로우',
|
||||
alertsLogin: '팔로우하는 계정의 경고를 보려면 로그인하세요.',
|
||||
providerTitle: '제공자',
|
||||
providerDesc: '점수는 당신이 선택한 제공자에서 나옵니다. 기본값은 커뮤니티 제공자입니다.',
|
||||
useCommunity: '커뮤니티 제공자 사용',
|
||||
setProvider: '제공자 설정',
|
||||
customPubkeyPlaceholder: '제공자 npub 또는 16진수 pubkey',
|
||||
customRelayPlaceholder: 'wss://relay.example.com',
|
||||
invalidProvider: '유효한 npub 또는 64자리 16진수 pubkey, 그리고 wss:// 릴레이를 입력하세요.',
|
||||
publishFailed: '제공자를 게시하지 못했습니다. 다시 시도하세요.',
|
||||
providerSaved: '제공자가 업데이트되었습니다.',
|
||||
loggedOutProvider: '제공자를 선택하려면 로그인하세요.',
|
||||
showMarks: '신뢰 마크 표시',
|
||||
showMarksDesc: '인증됨 및 알 수 없음 마크. 신고는 항상 표시됩니다.',
|
||||
sourceLabel: '출처',
|
||||
sourceHouse: '커뮤니티 신뢰 제공자',
|
||||
sourceCustom: '당신의 제공자',
|
||||
loggedOut: '자신의 신뢰 제공자를 선택하려면 로그인하세요.',
|
||||
seoTitle: '신뢰가 작동하는 방식',
|
||||
seoDescription: 'SkateSpots가 신뢰를 표시하는 방식: 세 가지 상태, 점수의 출처, 그리고 부재가 불신이 아닌 이유.',
|
||||
title: '신뢰가 작동하는 방식',
|
||||
intro: '여기서 신뢰는 판결이 아니라 신호입니다. 당신이 아는 사람, 또는 당신이 선택한 제공자에서 비롯됩니다. 우리는 사람을 전 세계적으로 순위를 매기지 않습니다.',
|
||||
statesTitle: '세 가지 상태',
|
||||
verifiedTitle: '인증됨',
|
||||
verifiedDesc: '당신의 네트워크의 누군가가 이 계정을 보증합니다: 친구의 친구, 또는 당신이 선택한 제공자.',
|
||||
unknownTitle: '알 수 없음',
|
||||
unknownDesc: '아직 아무도 보증하지 않았습니다. 모든 새 계정은 여기서 시작합니다.',
|
||||
flaggedTitle: '플래그됨',
|
||||
flaggedDesc: '신뢰하는 사람들이 이 계정을 신고했습니다. 더 자세히 살펴보라는 경고이며, 무엇인가의 증거는 아닙니다.',
|
||||
absenceTitle: '배지가 없다고 불신은 아니다',
|
||||
absenceDesc: '대부분의 계정은 아무것도 표시하지 않습니다. 그것은 당신의 네트워크에서 아직 아무도 보증하지 않았다는 의미이며, 뭔가 잘못되었다는 의미가 아닙니다. 마크의 부재를 부정적으로 읽지 마세요.',
|
||||
sourceTitle: '누가 계산하는가',
|
||||
sourceDesc: '기본적으로 당신 자신의 네트워크를 사용합니다. Nostr(NIP-85)를 통해 서명된 점수를 게시하는 신뢰 제공자를 선택하거나 표시를 끌 수도 있습니다. 플래그됨은 항상 표시됩니다. 안전 신호이기 때문입니다.',
|
||||
endorsementTitle: '존재는 보증이 아니다',
|
||||
endorsementDesc: '인증 마크는 누군가 보증했다는 의미이며, 그 사람이 선하다는 의미가 아닙니다. 플래그는 신뢰하는 사람들이 신고했다는 의미이며, 유죄라는 의미가 아닙니다. 결정 전에 세부 정보를 확인하세요.',
|
||||
povTitle: '보는 관점에 따라 다르다',
|
||||
povDesc: '점수는 누가 보는지에 상대적입니다. 한 제공자나 한 사람의 순위는 다른 것과 비교할 수 없으며, 우리는 그것을 객관적 사실로 제시하지 않습니다.',
|
||||
settingsCta: '설정에서 관리',
|
||||
},
|
||||
marketTerms: {
|
||||
link: '마켓플레이스 가이드라인',
|
||||
seoTitle: '마켓플레이스 가이드라인',
|
||||
seoDescription: 'SkateSpots 기어 리스팅의 작동 방식: P2P, 구매자 주의, 그리고 규칙.',
|
||||
title: '마켓플레이스 가이드라인',
|
||||
intro: 'SkateSpots는 P2P 기어 게시판입니다. 상대방과 직접 거래합니다: 우리는 자금을 보관하지 않고, 물품을 발송하지 않으며, 분쟁을 해결하지 않습니다.',
|
||||
howTitle: '작동 방식',
|
||||
howBody: '기어를 등록하고, 판매자에게 비공개 메시지로 연락하고, 직접 정산하세요(현금, Lightning, 또는 교환). 장바구니나 결제는 없습니다.',
|
||||
rulesTitle: '허용되지 않는 것',
|
||||
rulesBody: '불법, 위험, 성인 콘텐츠는 금지되며, 마약, 무기, 위조품, 도난품도 금지됩니다. 리스팅은 스케이트 기어와 관련 물품으로 유지하세요.',
|
||||
respectTitle: '존중하세요',
|
||||
respectBody: '욕설, 괴롭힘, 위협, 증오는 금지됩니다. 모더레이터는 리스팅이나 계정을 숨길 수 있습니다.',
|
||||
trustTitle: '신뢰는 지침이지 보증이 아니다',
|
||||
trustBody: '인증 마크와 거래 평판은 네트워크의 신호이지 약속이 아닙니다. 거래 전에 직접 확인하세요.',
|
||||
trustLink: '신뢰가 작동하는 방식',
|
||||
privacyLink: '기기에서 나가는 것',
|
||||
safetyTitle: '안전하게 거래하세요',
|
||||
safetyBody: '직접 만남은 공공장소에서, 발송 거래에는 에스크로나 성의 보증금을 사용하고, 앱 밖으로 돈을 보내지 마세요.',
|
||||
moderationTitle: '모더레이션은 부드럽고 되돌릴 수 있다',
|
||||
moderationBody: '숨겨진 콘텐츠는 릴레이에 남아 복원될 수 있으며, 사람 사이의 분쟁은 당신이 해결할 몫입니다.',
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: '티셔츠',
|
||||
hoodies: '후디 & 스웨트',
|
||||
pants: '팬츠 & 쇼츠',
|
||||
jackets: '재킷 & 아우터',
|
||||
kits: '팀 키트 & 저지',
|
||||
caps: '캡 & 비니',
|
||||
socks: '양말',
|
||||
accessories: '가방 & 액세서리',
|
||||
footwear: '풋웨어 & 신발',
|
||||
patches: '패치 & 아플리케',
|
||||
griptape: '그립테이프 & 데크 의류',
|
||||
onepiece: '원오브원 / 업사이클',
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: '커스텀 티셔츠와 상의',
|
||||
hoodies: '후디, 크루넥, 스웨트팬츠',
|
||||
pants: '워크 팬츠, 카고, 쇼츠',
|
||||
jackets: '코치 재킷, 셸, 워크 재킷',
|
||||
kits: '팀 키트, 저지, 유니폼',
|
||||
caps: '캡, 비니, 헤드웨어',
|
||||
socks: '크루 삭스와 니트',
|
||||
accessories: '가방, 벨트, 소품',
|
||||
footwear: '커스텀 신발과 풋웨어',
|
||||
patches: '자수 패치와 아플리케',
|
||||
griptape: '그립테이프 아트와 데크 의류',
|
||||
onepiece: '단품과 업사이클 의류',
|
||||
},
|
||||
method: {
|
||||
screenprint: '스크린 프린트',
|
||||
dtg: 'DTG / 다이렉트 투 가먼트',
|
||||
embroidery: '자수',
|
||||
cutsew: '컷 앤 쏘',
|
||||
sublimation: '승화 전사',
|
||||
heattransfer: '열전사 / 비닐',
|
||||
garmentdye: '가먼트 다이',
|
||||
knit: '니트웨어',
|
||||
patchwork: '패치워크',
|
||||
allover: '전면 프린트',
|
||||
},
|
||||
material: {
|
||||
cotton: '코튼',
|
||||
heavyweight: '헤비웨이트',
|
||||
organic: '오가닉 / 지속가능',
|
||||
fleece: '플리스',
|
||||
denim: '데님',
|
||||
canvas: '캔버스',
|
||||
nylon: '나일론 / 테크니컬',
|
||||
wool: '메리노 / 울',
|
||||
leather: '레더',
|
||||
recycled: '리사이클 / 데드스톡',
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: '의류 디자이너 되기 - SkateSpots',
|
||||
seoDescription: '씬을 위한 맞춤 의류, 팀 키트 & 의류.',
|
||||
heading: '의류 디자이너',
|
||||
tagline: '씬을 위한 맞춤 의류, 팀 키트 & 의류',
|
||||
noun: '의류 디자이너',
|
||||
rateLabel: '요금',
|
||||
portfolioLabel: '샵 / 포트폴리오 링크',
|
||||
sectionWhatYouMake: '무엇을 만드는가',
|
||||
sectionHowYouMake: '어떻게 만드는가',
|
||||
sectionMaterials: '재료',
|
||||
minimumPlaceholder: '예: 10벌',
|
||||
turnaroundPlaceholder: '예: 2-3주',
|
||||
sizingPlaceholder: '예: XS-3XL / 맞춤 제작',
|
||||
samplesHelper: '본 생산 전에 샘플이나 시제품을 제공하나요?',
|
||||
customizationPlaceholder: '예: 이름, 번호, 그래픽',
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: '업데이트됨',
|
||||
refresh: '새로고침',
|
||||
unavailable: '날씨를 사용할 수 없습니다.',
|
||||
retry: '재시도',
|
||||
sunrise: '일출',
|
||||
sunset: '일몰',
|
||||
legendTitle: '날씨 점수',
|
||||
legendWeatherOnly: '날씨만',
|
||||
},
|
||||
cordnUi: {
|
||||
title: '비공개 채팅',
|
||||
subtitle: '크루 멤버 간 종단 간 암호화(MLS). 코디네이터는 암호문과 메타데이터만 라우팅하며 메시지 내용은 절대 보지 않습니다.',
|
||||
notLoggedIn: '크루의 비공개 채팅을 사용하려면 로그인하세요.',
|
||||
membersOnly: '크루 멤버만 비공개 채팅을 열 수 있습니다.',
|
||||
connecting: '연결 중…',
|
||||
noCoordinator: '이 크루에는 아직 코디네이터가 설정되지 않았습니다.',
|
||||
noGroupAdmin: '이 크루의 비공개 채팅은 아직 만들어지지 않았습니다.',
|
||||
noGroupMember: '아직 이 크루의 비공개 채팅에 참여하지 않았습니다.',
|
||||
create: '비공개 채팅 만들기',
|
||||
requestJoin: '참여 요청',
|
||||
checkInvite: '초대 확인',
|
||||
requested: '요청을 보냈습니다 — 크루 관리자가 승인합니다.',
|
||||
noInvite: '아직 대기 중인 초대가 없습니다. 관리자에게 요청 승인을 부탁하세요.',
|
||||
placeholder: '크루에게 메시지…',
|
||||
send: '보내기',
|
||||
refresh: '새로고침',
|
||||
requests: '참여 요청',
|
||||
checkRequests: '요청 확인',
|
||||
approve: '추가',
|
||||
noRequests: '대기 중인 참여 요청이 없습니다.',
|
||||
inviteHint: '지금까지 이 채팅에는 당신만 있습니다 — 크루 멤버가 “참여 요청”을 누르면 여기서 승인할 수 있습니다.',
|
||||
memberCount: '그룹에 {{count}}명',
|
||||
you: '나',
|
||||
groupRef: '그룹 링크',
|
||||
copyRef: '복사',
|
||||
copied: '복사됨',
|
||||
attachImage: '이미지 첨부',
|
||||
uploading: '업로드 중…',
|
||||
uploadFailed: '이미지를 업로드하지 못했습니다.',
|
||||
bannerTitle: '이 크루에는 아직 비공개 채팅이 없습니다',
|
||||
bannerBody: '크루를 위한 종단 간 암호화(MLS) 채팅을 설정하세요 — 멤버는 탭에서 참여합니다.',
|
||||
bannerCta: '설정',
|
||||
ready: '연결됨 · MLS',
|
||||
errorPrefix: '코디네이터에 연결할 수 없습니다',
|
||||
interactiveHint: '서명자가 각 작업마다 승인을 요청합니다 — 필요에 따라 새로고침과 보내기를 사용하세요.',
|
||||
},
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,12 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
/**
|
||||
* ko translations — composed from fragments. Partial: missing keys fall
|
||||
* back to English; `check-i18n.mjs` reports coverage.
|
||||
*/
|
||||
const ko = {
|
||||
const ko = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -20,6 +19,8 @@ const ko = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default ko;
|
||||
|
|
|
|||
319
src/i18n/nl/drift.ts
Normal file
319
src/i18n/nl/drift.ts
Normal file
|
|
@ -0,0 +1,319 @@
|
|||
/**
|
||||
* nl — drift fill (245 keys added after en/es only).
|
||||
* Nested fragment spread additively into `nl/index.ts`.
|
||||
*/
|
||||
const drift = {
|
||||
"nav": {
|
||||
"searchLanguages": "Talen zoeken...",
|
||||
"noLanguages": "Geen talen gevonden"
|
||||
},
|
||||
"mapPage": {
|
||||
"searchSuggestPlaces": "Plaatsen"
|
||||
},
|
||||
"mapUi": {
|
||||
"firstRunTitle": "Aan de slag",
|
||||
"firstRunAddSpot": "Voeg je eerste spot toe",
|
||||
"firstRunJoinCrew": "Sluit je aan bij een crew",
|
||||
"firstRunStartCrew": "Start je crew",
|
||||
"firstRunWallet": "Stel je wallet in",
|
||||
"forecastDays": "{{count}}-daagse voorspelling"
|
||||
},
|
||||
"spotUi": {
|
||||
"forecastDays": "{{count}}-daagse voorspelling"
|
||||
},
|
||||
"marketUi": {
|
||||
"trades": {
|
||||
"stateRevoked": "Ingetrokken",
|
||||
"stateVerifying": "Verifiëren"
|
||||
},
|
||||
"loadFailed": "Kon de relays niet bereiken. Controleer je verbinding en probeer het opnieuw.",
|
||||
"statusPending": "In behandeling",
|
||||
"offers": {
|
||||
"closeDeal": "Deal sluiten",
|
||||
"loadFailed": "Kon biedingen niet laden. Controleer je verbinding en probeer het opnieuw."
|
||||
},
|
||||
"pay": {
|
||||
"nonSats": "Deze aanbieding is geprijsd in {{currency}}. Betalen in de app kan alleen met sats. Reken direct af met de verkoper.",
|
||||
"unsupported": "Deze betaalcode (een Cashu-verzoek) wordt nog niet ondersteund. Vraag de verkoper om een Lightning-factuur of -adres."
|
||||
},
|
||||
"escrowRequest": {
|
||||
"lockedNotSent": "Het geld staat vergrendeld in escrow en is op dit apparaat opgeslagen, maar het verzoek is niet verzonden. Open de advertentie opnieuw om het nog eens te proberen. Betaal niet nogmaals.",
|
||||
"mintLabel": "Mint (waar het geld is vergrendeld)",
|
||||
"sellerMintHint": "De verkoper geeft de voorkeur aan deze mint; geld dat hier vergrendeld is, kan hij het makkelijkst inwisselen.",
|
||||
"mintHint": "Escrow staat bij deze mint. De verkoper wisselt hier in, dus kies er een die jullie beiden vertrouwen.",
|
||||
"noMints": "Geen mints beschikbaar",
|
||||
"p2pkUnsupported": "Deze mint adverteert geen P2PK-ondersteuning (NUT-11), dus escrow kan hier niet worden vergrendeld. Kies een andere mint."
|
||||
}
|
||||
},
|
||||
"labUi": {
|
||||
"offerClothing": "Kleding aanbieden",
|
||||
"tabClothing": "Kleding",
|
||||
"empty": {
|
||||
"clothingTitle": "Nog geen kledingontwerpers",
|
||||
"clothingBody": "Wees de eerste die custom kleding, teamkits en apparel voor de scene aanbiedt."
|
||||
},
|
||||
"craftFields": {
|
||||
"sizing": "Maatbereik",
|
||||
"samples": "Monsters / prototypes",
|
||||
"customization": "Personalisatie"
|
||||
}
|
||||
},
|
||||
"socialUi": {
|
||||
"coordinator": {
|
||||
"ourDefaultTitle": "SkateSpots-coördinator",
|
||||
"ourDefaultDesc": "SkateSpots runt een coördinator op relay.skate-spots.org. Gebruik die standaard, of run je eigen — een coördinator ziet alleen ciphertext en metadata, nooit je berichten.",
|
||||
"useOurs": "SkateSpots-coördinator gebruiken"
|
||||
},
|
||||
"crewCoordinator": {
|
||||
"encryptedChat": "Versleutelde chat",
|
||||
"privateChatName": "Privéchat",
|
||||
"privateChatDesc": "Groepschat met forward secrecy (MLS) via een coördinator.",
|
||||
"privateChatDescFull": "Privéchat wordt één keer door een admin aangemaakt, daarna kunnen leden deelnemen.",
|
||||
"chatRowDesc": "Iedereen in de crew — verzegeld met de sleutel van elk lid (NIP-17).",
|
||||
"openChat": "Openen",
|
||||
"setUpChat": "Instellen",
|
||||
"joinChat": "Deelnemen",
|
||||
"checking": "Controleren…",
|
||||
"openInAnotherApp": "Openen in een andere app",
|
||||
"openInCordnWeb": "Cordn (web)",
|
||||
"openCordnGroup": "Crewchat openen",
|
||||
"copyForStaircase": "Kopiëren voor Staircase"
|
||||
},
|
||||
"dms": {
|
||||
"refresh": "Vernieuwen",
|
||||
"crews": "Crews",
|
||||
"crewFounder": "Oprichter",
|
||||
"crewMember": "Lid",
|
||||
"crewOpen": "Openen",
|
||||
"crewSetUp": "Instellen"
|
||||
},
|
||||
"form": {
|
||||
"cordnGroup": "Cordn-groep",
|
||||
"cordnGroupHint": "Optioneel: plak de grouplink van Staircase of Cordn web. Je crew krijgt dan echte end-to-end MLS-chat, gehost op onze coördinator."
|
||||
}
|
||||
},
|
||||
"settingsUi": {
|
||||
"settingsPage": {
|
||||
"trust": "Vertrouwen",
|
||||
"trustSub": "Bronnen en weergave"
|
||||
}
|
||||
},
|
||||
"walletUi": {
|
||||
"trust": {
|
||||
"mute": "Dempen",
|
||||
"muted": "Gedempt",
|
||||
"mutedDesc": "Je ziet hun content niet meer.",
|
||||
"muteFailed": "Kon niet dempen. Probeer het opnieuw.",
|
||||
"loginToMute": "Log in om te dempen.",
|
||||
"attributedNetwork": "Van mensen in je netwerk",
|
||||
"attributedProviderHouse": "Van de community-vertrouwensprovider",
|
||||
"attributedProviderCustom": "Van de provider die jij koos",
|
||||
"howItWorks": "Hoe vertrouwen werkt",
|
||||
"flaggedNoticeTitle": "Gemeld door vertrouwde skaters",
|
||||
"flaggedNoticeDesc": "Wees voorzichtig. Vertrouwde mensen in het netwerk hebben dit account gemeld.",
|
||||
"flaggedReporterFollow": "{{count}} die je volgt",
|
||||
"flaggedReporterNetwork": "{{count}} in je netwerk",
|
||||
"flaggedReporterOther": "{{count}} andere accounts",
|
||||
"flaggedReport": "Rapporteren",
|
||||
"flaggedDismiss": "Negeren",
|
||||
"bucketVerified": "Geverifieerd",
|
||||
"bucketUnknown": "Onbekend",
|
||||
"bucketFlagged": "Gemarkeerd",
|
||||
"bucketVerifiedDesc": "Iemand in je netwerk staat garant voor dit account.",
|
||||
"bucketUnknownDesc": "Nog niemand in je netwerk heeft voor dit account ingestaan.",
|
||||
"bucketFlaggedDesc": "Vertrouwde mensen hebben dit account gemeld.",
|
||||
"reportedByTrusted": "Gemeld door {{count}} vertrouwde mensen"
|
||||
}
|
||||
},
|
||||
"trustUi": {
|
||||
"alertsTitle": "Netwerkmeldingen",
|
||||
"alertsDesc": "Accounts die je volgt en die vertrouwde mensen hebben gemeld of gedempt.",
|
||||
"alertsEmpty": "Geen meldingen. We controleren de accounts die je volgt op meldingen van vertrouwde mensen.",
|
||||
"alertsReported": "Gemeld door {{count}} vertrouwde mensen",
|
||||
"alertsMuted": "Gedempt door {{count}} vertrouwde mensen",
|
||||
"alertsIgnore": "Negeren",
|
||||
"alertsUnfollow": "Ontvolgen",
|
||||
"alertsLogin": "Log in om meldingen te zien voor de accounts die je volgt.",
|
||||
"providerTitle": "Provider",
|
||||
"providerDesc": "Scores komen van een provider die jij kiest. De community-provider is de standaard.",
|
||||
"useCommunity": "Community-provider gebruiken",
|
||||
"setProvider": "Een provider instellen",
|
||||
"customPubkeyPlaceholder": "Provider-npub of hex-pubkey",
|
||||
"customRelayPlaceholder": "wss://relay.example.com",
|
||||
"invalidProvider": "Voer een geldige npub of 64-tekens hex-pubkey in, plus een wss://-relay.",
|
||||
"publishFailed": "Kon de provider niet publiceren. Probeer het opnieuw.",
|
||||
"providerSaved": "Provider bijgewerkt.",
|
||||
"loggedOutProvider": "Log in om een provider te kiezen.",
|
||||
"showMarks": "Vertrouwensmarkeringen tonen",
|
||||
"showMarksDesc": "Geverifieerde en onbekende markeringen. Meldingen worden altijd getoond.",
|
||||
"sourceLabel": "Bron",
|
||||
"sourceHouse": "Community-vertrouwensprovider",
|
||||
"sourceCustom": "Jouw provider",
|
||||
"loggedOut": "Log in om je eigen vertrouwensprovider te kiezen.",
|
||||
"seoTitle": "Hoe vertrouwen werkt",
|
||||
"seoDescription": "Hoe SkateSpots vertrouwen toont: drie staten, waar scores vandaan komen, en waarom afwezigheid geen wantrouwen is.",
|
||||
"title": "Hoe vertrouwen werkt",
|
||||
"intro": "Vertrouwen is hier een signaal, geen vonnis. Het komt van wie je kent, of van een provider die jij kiest. We rangschikken mensen niet wereldwijd.",
|
||||
"statesTitle": "Drie staten",
|
||||
"verifiedTitle": "Geverifieerd",
|
||||
"verifiedDesc": "Iemand in je netwerk staat garant voor dit account: een vriend van een vriend, of je gekozen provider.",
|
||||
"unknownTitle": "Onbekend",
|
||||
"unknownDesc": "Nog niemand heeft ingestaan. Hier begint elk nieuw account.",
|
||||
"flaggedTitle": "Gemarkeerd",
|
||||
"flaggedDesc": "Vertrouwde mensen hebben dit account gemeld. Het is een waarschuwing om beter te kijken, geen bewijs van wat dan ook.",
|
||||
"absenceTitle": "Geen badge is geen wantrouwen",
|
||||
"absenceDesc": "De meeste accounts tonen helemaal niets. Dat betekent dat nog niemand in je netwerk voor hen heeft ingestaan, niet dat er iets mis is. Lees een ontbrekende markering nooit als negatief.",
|
||||
"sourceTitle": "Wie het berekent",
|
||||
"sourceDesc": "Standaard gebruiken we je eigen netwerk. Je kunt ook een vertrouwensprovider kiezen die ondertekende scores via Nostr publiceert (NIP-85), of de weergave uitzetten. Gemarkeerd wordt altijd getoond, want het is een veiligheidssignaal.",
|
||||
"endorsementTitle": "Aanwezigheid is geen goedkeuring",
|
||||
"endorsementDesc": "Een geverifieerde markering betekent dat iemand instond, niet dat de persoon goed is. Een markering betekent dat vertrouwde mensen hen hebben gemeld, niet dat ze schuldig zijn. Bekijk de details voordat je beslist.",
|
||||
"povTitle": "Het hangt af van het perspectief",
|
||||
"povDesc": "Een score is relatief aan wie kijkt. Een rang van de ene provider of persoon is niet vergelijkbaar met die van een ander, en we presenteren er nooit een als een objectief feit.",
|
||||
"settingsCta": "Beheren in Instellingen"
|
||||
},
|
||||
"marketTerms": {
|
||||
"link": "Marktplaatsrichtlijnen",
|
||||
"seoTitle": "Marktplaatsrichtlijnen",
|
||||
"seoDescription": "Hoe SkateSpots-advertenties werken: peer-to-peer, koper let op, en de regels.",
|
||||
"title": "Marktplaatsrichtlijnen",
|
||||
"intro": "SkateSpots is een peer-to-peer board voor gear. Je doet zaken rechtstreeks met de andere persoon: wij houden geen geld vast, verzenden geen items en lossen geen geschillen op.",
|
||||
"howTitle": "Hoe het werkt",
|
||||
"howBody": "Zet gear te koop, neem contact op met de verkoper via een privébericht en reken direct af (cash, Lightning of een ruil). Er is geen winkelwagen of afrekenen.",
|
||||
"rulesTitle": "Wat niet is toegestaan",
|
||||
"rulesBody": "Geen illegale, gevaarlijke of adult content; geen drugs, wapens, namaak of gestolen goederen. Houd advertenties over skategear en gerelateerde items.",
|
||||
"respectTitle": "Wees respectvol",
|
||||
"respectBody": "Geen misbruik, intimidatie, bedreigingen of haat. Moderators kunnen advertenties of accounts verbergen.",
|
||||
"trustTitle": "Vertrouwen is een gids, geen garantie",
|
||||
"trustBody": "Verificatiemarkeringen en handelsreputatie zijn signalen uit het netwerk, geen beloftes. Doe je eigen controles voordat je handelt.",
|
||||
"trustLink": "Hoe vertrouwen werkt",
|
||||
"privacyLink": "Wat je apparaat verlaat",
|
||||
"safetyTitle": "Handel veilig",
|
||||
"safetyBody": "Spreek af in het openbaar voor overdrachten, gebruik escrow of een waarborg voor verzenddeals, en stuur nooit geld buiten de app.",
|
||||
"moderationTitle": "Moderatie is zacht en omkeerbaar",
|
||||
"moderationBody": "Verborgen content blijft op relays staan en kan worden hersteld; geschillen tussen mensen los jij zelf op."
|
||||
},
|
||||
"labOptions": {
|
||||
"clothing": {
|
||||
"service": {
|
||||
"tees": "T-shirts",
|
||||
"hoodies": "Hoodies & sweaters",
|
||||
"pants": "Broeken & shorts",
|
||||
"jackets": "Jassen & buitenkleding",
|
||||
"kits": "Teamkits & jerseys",
|
||||
"caps": "Petten & mutsen",
|
||||
"socks": "Sokken",
|
||||
"accessories": "Tassen & accessoires",
|
||||
"footwear": "Schoeisel & schoenen",
|
||||
"patches": "Patches & appliqué",
|
||||
"griptape": "Griptape- & deckkleding",
|
||||
"onepiece": "Unica / upcycled"
|
||||
},
|
||||
"serviceDesc": {
|
||||
"tees": "Custom shirts en tops",
|
||||
"hoodies": "Hoodies, sweaters en trainingsbroeken",
|
||||
"pants": "Werkbroeken, cargo's en shorts",
|
||||
"jackets": "Coaches, shells en werkjassen",
|
||||
"kits": "Teamkits, jerseys en tenues",
|
||||
"caps": "Petten, mutsen en hoofddeksels",
|
||||
"socks": "Crewsokken en breigoed",
|
||||
"accessories": "Tassen, riemen en kleine spullen",
|
||||
"footwear": "Custom schoenen en schoeisel",
|
||||
"patches": "Geborduurde patches en appliqué",
|
||||
"griptape": "Griptape-kunst en deckkleding",
|
||||
"onepiece": "Losse stukken en upcycled kleding"
|
||||
},
|
||||
"method": {
|
||||
"screenprint": "Zeefdruk",
|
||||
"dtg": "DTG / direct-to-garment",
|
||||
"embroidery": "Borduren",
|
||||
"cutsew": "Cut & sew",
|
||||
"sublimation": "Sublimatie",
|
||||
"heattransfer": "Heat transfer / vinyl",
|
||||
"garmentdye": "Kledingverven",
|
||||
"knit": "Breigoed",
|
||||
"patchwork": "Patchwork",
|
||||
"allover": "All-over print"
|
||||
},
|
||||
"material": {
|
||||
"cotton": "Katoen",
|
||||
"heavyweight": "Zwaargewicht",
|
||||
"organic": "Biologisch / duurzaam",
|
||||
"fleece": "Fleece",
|
||||
"denim": "Denim",
|
||||
"canvas": "Canvas",
|
||||
"nylon": "Nylon / technisch",
|
||||
"wool": "Merino / wol",
|
||||
"leather": "Leer",
|
||||
"recycled": "Gerecycled / deadstock"
|
||||
}
|
||||
}
|
||||
},
|
||||
"becomeRolesUi": {
|
||||
"clothing": {
|
||||
"seoTitle": "Kledingontwerper worden - SkateSpots",
|
||||
"seoDescription": "Custom kleding, teamkits & apparel voor de scene.",
|
||||
"heading": "Kledingontwerper",
|
||||
"tagline": "Custom kleding, teamkits & apparel voor de scene",
|
||||
"noun": "kledingontwerper",
|
||||
"rateLabel": "Tarief",
|
||||
"portfolioLabel": "Shop- / portfoliolink",
|
||||
"sectionWhatYouMake": "Wat je maakt",
|
||||
"sectionHowYouMake": "Hoe je het maakt",
|
||||
"sectionMaterials": "Materialen",
|
||||
"minimumPlaceholder": "bijv. 10 stuks",
|
||||
"turnaroundPlaceholder": "bijv. 2-3 weken",
|
||||
"sizingPlaceholder": "bijv. XS-3XL / op maat",
|
||||
"samplesHelper": "Bied je monsters of prototypes aan voordat je een volledige run doet?",
|
||||
"customizationPlaceholder": "bijv. namen, nummers, graphics"
|
||||
}
|
||||
},
|
||||
"weatherUi": {
|
||||
"updated": "Bijgewerkt",
|
||||
"refresh": "Vernieuwen",
|
||||
"unavailable": "Weer niet beschikbaar.",
|
||||
"retry": "Opnieuw proberen",
|
||||
"sunrise": "Zonsopkomst",
|
||||
"sunset": "Zonsondergang",
|
||||
"legendTitle": "Weerscore",
|
||||
"legendWeatherOnly": "Alleen weer"
|
||||
},
|
||||
"cordnUi": {
|
||||
"title": "Privéchat",
|
||||
"subtitle": "End-to-end versleuteld (MLS) tussen crewleden. De coördinator routeert alleen ciphertext en metadata — hij ziet nooit de inhoud van berichten.",
|
||||
"notLoggedIn": "Log in om de privéchat van de crew te gebruiken.",
|
||||
"membersOnly": "Alleen crewleden kunnen de privéchat openen.",
|
||||
"connecting": "Verbinden…",
|
||||
"noCoordinator": "Voor deze crew is nog geen coördinator ingesteld.",
|
||||
"noGroupAdmin": "De privéchat van deze crew is nog niet aangemaakt.",
|
||||
"noGroupMember": "Je zit nog niet in de privéchat van deze crew.",
|
||||
"create": "De privéchat aanmaken",
|
||||
"requestJoin": "Vragen om deel te nemen",
|
||||
"checkInvite": "Op uitnodiging controleren",
|
||||
"requested": "Verzoek verzonden — een crew-admin keurt het goed.",
|
||||
"noInvite": "Nog geen uitnodiging. Vraag een admin je verzoek goed te keuren.",
|
||||
"placeholder": "Bericht de crew…",
|
||||
"send": "Verzenden",
|
||||
"refresh": "Vernieuwen",
|
||||
"requests": "Deelnameverzoeken",
|
||||
"checkRequests": "Verzoeken controleren",
|
||||
"approve": "Toevoegen",
|
||||
"noRequests": "Geen openstaande deelnameverzoeken.",
|
||||
"inviteHint": "Alleen jij zit tot nu toe in deze chat — crewleden kunnen op “Vragen om deel te nemen” tikken, daarna keur je hen hier goed.",
|
||||
"memberCount": "{{count}} in de groep",
|
||||
"you": "Jij",
|
||||
"groupRef": "Grouplink",
|
||||
"copyRef": "Kopiëren",
|
||||
"copied": "Gekopieerd",
|
||||
"attachImage": "Afbeelding toevoegen",
|
||||
"uploading": "Uploaden…",
|
||||
"uploadFailed": "Kon de afbeelding niet uploaden.",
|
||||
"bannerTitle": "Deze crew heeft nog geen privéchat",
|
||||
"bannerBody": "Stel end-to-end versleutelde (MLS) chat in voor je crew — leden nemen deel via het tabblad.",
|
||||
"bannerCta": "Instellen",
|
||||
"ready": "Verbonden · MLS",
|
||||
"errorPrefix": "Kon de coördinator niet bereiken",
|
||||
"interactiveHint": "Je signer vraagt goedkeuring bij elke actie — gebruik Vernieuwen en Verzenden zoals nodig."
|
||||
}
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,12 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
/**
|
||||
* nl translations — composed from fragments. Partial: missing keys fall
|
||||
* back to English; `check-i18n.mjs` reports coverage.
|
||||
*/
|
||||
const nl = {
|
||||
const nl = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -20,6 +19,8 @@ const nl = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default nl;
|
||||
|
|
|
|||
319
src/i18n/pl/drift.ts
Normal file
319
src/i18n/pl/drift.ts
Normal file
|
|
@ -0,0 +1,319 @@
|
|||
/**
|
||||
* pl — drift fill (245 keys added after en/es only).
|
||||
* Nested fragment spread additively into `pl/index.ts`.
|
||||
*/
|
||||
const drift = {
|
||||
"nav": {
|
||||
"searchLanguages": "Szukaj języków...",
|
||||
"noLanguages": "Nie znaleziono języków"
|
||||
},
|
||||
"mapPage": {
|
||||
"searchSuggestPlaces": "Miejsca"
|
||||
},
|
||||
"mapUi": {
|
||||
"firstRunTitle": "Zacznij",
|
||||
"firstRunAddSpot": "Dodaj swój pierwszy spot",
|
||||
"firstRunJoinCrew": "Dołącz do crew",
|
||||
"firstRunStartCrew": "Załóż swoje crew",
|
||||
"firstRunWallet": "Skonfiguruj portfel",
|
||||
"forecastDays": "Prognoza na {{count}} dni"
|
||||
},
|
||||
"spotUi": {
|
||||
"forecastDays": "Prognoza na {{count}} dni"
|
||||
},
|
||||
"marketUi": {
|
||||
"trades": {
|
||||
"stateRevoked": "Wycofane",
|
||||
"stateVerifying": "Weryfikacja"
|
||||
},
|
||||
"loadFailed": "Nie udało się połączyć z relayami. Sprawdź połączenie i spróbuj ponownie.",
|
||||
"statusPending": "Oczekujące",
|
||||
"offers": {
|
||||
"closeDeal": "Zamknij deal",
|
||||
"loadFailed": "Nie udało się wczytać ofert. Sprawdź połączenie i spróbuj ponownie."
|
||||
},
|
||||
"pay": {
|
||||
"nonSats": "Ta oferta jest wyceniona w {{currency}}. Płatność w aplikacji tylko w sats. Rozlicz się bezpośrednio ze sprzedającym.",
|
||||
"unsupported": "Ten kod płatności (żądanie Cashu) nie jest jeszcze obsługiwany. Poproś sprzedającego o fakturę Lightning lub adres."
|
||||
},
|
||||
"escrowRequest": {
|
||||
"lockedNotSent": "Środki są zablokowane w escrow i zapisane na tym urządzeniu, ale żądanie nie zostało wysłane. Otwórz ogłoszenie ponownie, aby spróbować. Nie płać drugi raz.",
|
||||
"mintLabel": "Mint (gdzie są zablokowane środki)",
|
||||
"sellerMintHint": "Sprzedający preferuje ten mint; środki tu zablokowane najłatwiej mu zrealizować.",
|
||||
"mintHint": "Escrow znajduje się w tym mincie. Sprzedający realizuje tu, więc wybierz taki, któremu oboje ufacie.",
|
||||
"noMints": "Brak dostępnych mintów",
|
||||
"p2pkUnsupported": "Ten mint nie deklaruje obsługi P2PK (NUT-11), więc escrow nie może tu zostać zablokowane. Wybierz inny mint."
|
||||
}
|
||||
},
|
||||
"labUi": {
|
||||
"offerClothing": "Oferuj odzież",
|
||||
"tabClothing": "Odzież",
|
||||
"empty": {
|
||||
"clothingTitle": "Jeszcze brak projektantów odzieży",
|
||||
"clothingBody": "Bądź pierwszą osobą, która zaoferuje ubrania na zamówienie, stroje drużynowe i odzież dla sceny."
|
||||
},
|
||||
"craftFields": {
|
||||
"sizing": "Zakres rozmiarów",
|
||||
"samples": "Próbki / prototypy",
|
||||
"customization": "Personalizacja"
|
||||
}
|
||||
},
|
||||
"socialUi": {
|
||||
"coordinator": {
|
||||
"ourDefaultTitle": "Koordynator SkateSpots",
|
||||
"ourDefaultDesc": "SkateSpots uruchamia koordynatora pod relay.skate-spots.org. Domyślnie korzystaj z niego albo uruchom własny — koordynator widzi wyłącznie szyfrogram i metadane, nigdy twoich wiadomości.",
|
||||
"useOurs": "Użyj koordynatora SkateSpots"
|
||||
},
|
||||
"crewCoordinator": {
|
||||
"encryptedChat": "Zaszyfrowany czat",
|
||||
"privateChatName": "Prywatny czat",
|
||||
"privateChatDesc": "Grupowy czat z tajnością forward (MLS) przez koordynatora.",
|
||||
"privateChatDescFull": "Prywatny czat tworzy raz administrator, potem członkowie dołączają.",
|
||||
"chatRowDesc": "Wszyscy w crew — zapieczętowane kluczem każdego członka (NIP-17).",
|
||||
"openChat": "Otwórz",
|
||||
"setUpChat": "Skonfiguruj",
|
||||
"joinChat": "Dołącz",
|
||||
"checking": "Sprawdzanie…",
|
||||
"openInAnotherApp": "Otwórz w innej aplikacji",
|
||||
"openInCordnWeb": "Cordn (web)",
|
||||
"openCordnGroup": "Otwórz czat crew",
|
||||
"copyForStaircase": "Kopiuj dla Staircase"
|
||||
},
|
||||
"dms": {
|
||||
"refresh": "Odśwież",
|
||||
"crews": "Crewy",
|
||||
"crewFounder": "Założyciel",
|
||||
"crewMember": "Członek",
|
||||
"crewOpen": "Otwórz",
|
||||
"crewSetUp": "Skonfiguruj"
|
||||
},
|
||||
"form": {
|
||||
"cordnGroup": "Grupa Cordn",
|
||||
"cordnGroupHint": "Opcjonalnie: wklej link do grupy ze Staircase lub Cordn web. Twoje crew dostanie wtedy prawdziwy czat MLS end-to-end, hostowany na naszym koordynatorze."
|
||||
}
|
||||
},
|
||||
"settingsUi": {
|
||||
"settingsPage": {
|
||||
"trust": "Zaufanie",
|
||||
"trustSub": "Źródła i wyświetlanie"
|
||||
}
|
||||
},
|
||||
"walletUi": {
|
||||
"trust": {
|
||||
"mute": "Wycisz",
|
||||
"muted": "Wyciszony",
|
||||
"mutedDesc": "Nie zobaczysz ich treści.",
|
||||
"muteFailed": "Nie udało się wyciszyć. Spróbuj ponownie.",
|
||||
"loginToMute": "Zaloguj się, aby wyciszyć.",
|
||||
"attributedNetwork": "Od osób w twojej sieci",
|
||||
"attributedProviderHouse": "Od społecznościowego dostawcy zaufania",
|
||||
"attributedProviderCustom": "Od wybranego przez ciebie dostawcy",
|
||||
"howItWorks": "Jak działa zaufanie",
|
||||
"flaggedNoticeTitle": "Zgłoszone przez zaufanych skaterów",
|
||||
"flaggedNoticeDesc": "Uważaj. Zaufane osoby w sieci zgłosiły to konto.",
|
||||
"flaggedReporterFollow": "{{count}} obserwowanych",
|
||||
"flaggedReporterNetwork": "{{count}} w twojej sieci",
|
||||
"flaggedReporterOther": "{{count}} innych kont",
|
||||
"flaggedReport": "Zgłoś",
|
||||
"flaggedDismiss": "Odrzuć",
|
||||
"bucketVerified": "Zweryfikowany",
|
||||
"bucketUnknown": "Nieznany",
|
||||
"bucketFlagged": "Oznaczony",
|
||||
"bucketVerifiedDesc": "Ktoś w twojej sieci poręcza za to konto.",
|
||||
"bucketUnknownDesc": "Nikt w twojej sieci jeszcze nie poręczył za to konto.",
|
||||
"bucketFlaggedDesc": "Zaufane osoby zgłosiły to konto.",
|
||||
"reportedByTrusted": "Zgłoszone przez {{count}} zaufanych osób"
|
||||
}
|
||||
},
|
||||
"trustUi": {
|
||||
"alertsTitle": "Alerty sieci",
|
||||
"alertsDesc": "Konta, które obserwujesz, a które zaufane osoby zgłosiły lub wyciszyły.",
|
||||
"alertsEmpty": "Brak alertów. Sprawdzamy obserwowane konta pod kątem zgłoszeń od zaufanych osób.",
|
||||
"alertsReported": "Zgłoszone przez {{count}} zaufanych osób",
|
||||
"alertsMuted": "Wyciszone przez {{count}} zaufanych osób",
|
||||
"alertsIgnore": "Ignoruj",
|
||||
"alertsUnfollow": "Przestań obserwować",
|
||||
"alertsLogin": "Zaloguj się, aby zobaczyć alerty dla obserwowanych kont.",
|
||||
"providerTitle": "Dostawca",
|
||||
"providerDesc": "Oceny pochodzą od wybranego przez ciebie dostawcy. Domyślnym jest dostawca społecznościowy.",
|
||||
"useCommunity": "Użyj dostawcy społecznościowego",
|
||||
"setProvider": "Ustaw dostawcę",
|
||||
"customPubkeyPlaceholder": "npub lub hex klucza publicznego dostawcy",
|
||||
"customRelayPlaceholder": "wss://relay.example.com",
|
||||
"invalidProvider": "Wprowadź prawidłowy npub lub 64-znakowy hex klucza publicznego oraz relay wss://.",
|
||||
"publishFailed": "Nie udało się opublikować dostawcy. Spróbuj ponownie.",
|
||||
"providerSaved": "Dostawca zaktualizowany.",
|
||||
"loggedOutProvider": "Zaloguj się, aby wybrać dostawcę.",
|
||||
"showMarks": "Pokaż oznaczenia zaufania",
|
||||
"showMarksDesc": "Oznaczenia zweryfikowane i nieznane. Zgłoszenia pokazują się zawsze.",
|
||||
"sourceLabel": "Źródło",
|
||||
"sourceHouse": "Społecznościowy dostawca zaufania",
|
||||
"sourceCustom": "Twój dostawca",
|
||||
"loggedOut": "Zaloguj się, aby wybrać własnego dostawcę zaufania.",
|
||||
"seoTitle": "Jak działa zaufanie",
|
||||
"seoDescription": "Jak SkateSpots pokazuje zaufanie: trzy stany, skąd pochodzą oceny i dlaczego brak nie oznacza nieufności.",
|
||||
"title": "Jak działa zaufanie",
|
||||
"intro": "Zaufanie jest tu sygnałem, nie wyrokiem. Pochodzi od tego, kogo znasz, lub od wybranego przez ciebie dostawcy. Nie rankingujemy ludzi globalnie.",
|
||||
"statesTitle": "Trzy stany",
|
||||
"verifiedTitle": "Zweryfikowany",
|
||||
"verifiedDesc": "Ktoś w twojej sieci poręcza za to konto: znajomy znajomego lub wybrany dostawca.",
|
||||
"unknownTitle": "Nieznany",
|
||||
"unknownDesc": "Nikt jeszcze nie poręczył. Tu zaczyna każde nowe konto.",
|
||||
"flaggedTitle": "Oznaczony",
|
||||
"flaggedDesc": "Zaufane osoby zgłosiły to konto. To ostrzeżenie, aby przyjrzeć się bliżej, a nie dowód czegokolwiek.",
|
||||
"absenceTitle": "Brak odznaki to nie nieufność",
|
||||
"absenceDesc": "Większość kont nie pokazuje niczego. To znaczy, że nikt w twojej sieci jeszcze za nimi nie poręczył, a nie że coś jest nie tak. Nigdy nie odczytuj brakującego oznaczenia jako negatywu.",
|
||||
"sourceTitle": "Kto to oblicza",
|
||||
"sourceDesc": "Domyślnie używamy twojej własnej sieci. Możesz też wybrać dostawcę zaufania publikującego podpisane oceny przez Nostr (NIP-85) albo wyłączyć wyświetlanie. Oznaczone pokazuje się zawsze, bo to sygnał bezpieczeństwa.",
|
||||
"endorsementTitle": "Obecność to nie poparcie",
|
||||
"endorsementDesc": "Zweryfikowane oznaczenie znaczy, że ktoś poręczył, a nie że osoba jest dobra. Oznaczenie znaczy, że zaufane osoby ją zgłosiły, a nie że jest winna. Sprawdź szczegóły, zanim zdecydujesz.",
|
||||
"povTitle": "To zależy od punktu widzenia",
|
||||
"povDesc": "Ocena jest względna wobec tego, kto patrzy. Ranga od jednego dostawcy lub osoby nie jest porównywalna z inną i nigdy nie przedstawiamy jej jako obiektywnego faktu.",
|
||||
"settingsCta": "Zarządzaj w Ustawieniach"
|
||||
},
|
||||
"marketTerms": {
|
||||
"link": "Zasady Marketplace",
|
||||
"seoTitle": "Zasady Marketplace",
|
||||
"seoDescription": "Jak działają ogłoszenia sprzętu SkateSpots: peer-to-peer, kupujący uważaj, i zasady.",
|
||||
"title": "Zasady Marketplace",
|
||||
"intro": "SkateSpots to tablica sprzętu peer-to-peer. Masz do czynienia bezpośrednio z drugą osobą: nie przechowujemy środków, nie wysyłamy przedmiotów ani nie rozstrzygamy sporów.",
|
||||
"howTitle": "Jak to działa",
|
||||
"howBody": "Wystaw sprzęt, skontaktuj się ze sprzedającym w prywatnej wiadomości i rozlicz się bezpośrednio (gotówka, Lightning lub zamiana). Nie ma koszyka ani kasy.",
|
||||
"rulesTitle": "Czego nie wolno",
|
||||
"rulesBody": "Zakaz treści nielegalnych, niebezpiecznych i dla dorosłych; narkotyków, broni, podróbek i kradzionych rzeczy. Ogłoszenia dotyczą sprzętu skate i rzeczy z nim związanych.",
|
||||
"respectTitle": "Bądź szanujący",
|
||||
"respectBody": "Zakaz nadużyć, nękania, gróźb i mowy nienawiści. Moderatorzy mogą ukryć ogłoszenia lub konta.",
|
||||
"trustTitle": "Zaufanie to wskazówka, nie gwarancja",
|
||||
"trustBody": "Oznaczenia weryfikacji i reputacja handlowa to sygnały z sieci, nie obietnice. Zrób własne sprawdzenie, zanim dokonasz transakcji.",
|
||||
"trustLink": "Jak działa zaufanie",
|
||||
"privacyLink": "Co opuszcza twoje urządzenie",
|
||||
"safetyTitle": "Handluj bezpiecznie",
|
||||
"safetyBody": "Spotykaj się w miejscach publicznych przy przekazaniu, używaj escrow lub zadatku w dobrej wierze przy wysyłce i nigdy nie wysyłaj pieniędzy poza aplikacją.",
|
||||
"moderationTitle": "Moderacja jest łagodna i odwracalna",
|
||||
"moderationBody": "Ukryta treść pozostaje na relayach i można ją przywrócić; spory między ludźmi rozstrzygasz sam."
|
||||
},
|
||||
"labOptions": {
|
||||
"clothing": {
|
||||
"service": {
|
||||
"tees": "T-shirty",
|
||||
"hoodies": "Bluzy i dresy",
|
||||
"pants": "Spodnie i szorty",
|
||||
"jackets": "Kurtki i odzież wierzchnia",
|
||||
"kits": "Stroje i koszulki drużynowe",
|
||||
"caps": "Czapki z daszkiem i beanie",
|
||||
"socks": "Skarpety",
|
||||
"accessories": "Torby i akcesoria",
|
||||
"footwear": "Obuwie i buty",
|
||||
"patches": "Naszywki i aplikacje",
|
||||
"griptape": "Griptape i odzież na deck",
|
||||
"onepiece": "Unikaty / upcycling"
|
||||
},
|
||||
"serviceDesc": {
|
||||
"tees": "Koszulki i topy na zamówienie",
|
||||
"hoodies": "Bluzy, dresy i spodnie dresowe",
|
||||
"pants": "Spodnie robocze, cargo i szorty",
|
||||
"jackets": "Kurtki trenerskie, shell i robocze",
|
||||
"kits": "Stroje, koszulki i uniformy drużynowe",
|
||||
"caps": "Czapki, beanie i nakrycia głowy",
|
||||
"socks": "Skarpety i dzianiny",
|
||||
"accessories": "Torby, paski i drobne dodatki",
|
||||
"footwear": "Buty i obuwie na zamówienie",
|
||||
"patches": "Haftowane naszywki i aplikacje",
|
||||
"griptape": "Sztuka na griptape i odzież na deck",
|
||||
"onepiece": "Pojedyncze sztuki i ubrania z upcyklingu"
|
||||
},
|
||||
"method": {
|
||||
"screenprint": "Sitodruk",
|
||||
"dtg": "DTG / direct-to-garment",
|
||||
"embroidery": "Haft",
|
||||
"cutsew": "Cut & sew",
|
||||
"sublimation": "Sublimacja",
|
||||
"heattransfer": "Heat transfer / winyl",
|
||||
"garmentdye": "Barwienie odzieży",
|
||||
"knit": "Dzianina",
|
||||
"patchwork": "Patchwork",
|
||||
"allover": "Nadruk all-over"
|
||||
},
|
||||
"material": {
|
||||
"cotton": "Bawełna",
|
||||
"heavyweight": "Ciężka gramatura",
|
||||
"organic": "Organiczna / zrównoważona",
|
||||
"fleece": "Fleece",
|
||||
"denim": "Denim",
|
||||
"canvas": "Canvas",
|
||||
"nylon": "Nylon / techniczny",
|
||||
"wool": "Merino / wełna",
|
||||
"leather": "Skóra",
|
||||
"recycled": "Z recyklingu / deadstock"
|
||||
}
|
||||
}
|
||||
},
|
||||
"becomeRolesUi": {
|
||||
"clothing": {
|
||||
"seoTitle": "Zostań projektantem odzieży - SkateSpots",
|
||||
"seoDescription": "Ubrania na zamówienie, stroje drużynowe i odzież dla sceny.",
|
||||
"heading": "Projektant odzieży",
|
||||
"tagline": "Ubrania na zamówienie, stroje drużynowe i odzież dla sceny",
|
||||
"noun": "projektant odzieży",
|
||||
"rateLabel": "Stawka",
|
||||
"portfolioLabel": "Link do sklepu / portfolio",
|
||||
"sectionWhatYouMake": "Co tworzysz",
|
||||
"sectionHowYouMake": "Jak to tworzysz",
|
||||
"sectionMaterials": "Materiały",
|
||||
"minimumPlaceholder": "np. 10 sztuk",
|
||||
"turnaroundPlaceholder": "np. 2-3 tygodnie",
|
||||
"sizingPlaceholder": "np. XS-3XL / na miarę",
|
||||
"samplesHelper": "Oferujesz próbki lub prototypy przed pełną serią?",
|
||||
"customizationPlaceholder": "np. imiona, numery, grafiki"
|
||||
}
|
||||
},
|
||||
"weatherUi": {
|
||||
"updated": "Zaktualizowano",
|
||||
"refresh": "Odśwież",
|
||||
"unavailable": "Pogoda niedostępna.",
|
||||
"retry": "Ponów",
|
||||
"sunrise": "Wschód słońca",
|
||||
"sunset": "Zachód słońca",
|
||||
"legendTitle": "Ocena pogody",
|
||||
"legendWeatherOnly": "Tylko pogoda"
|
||||
},
|
||||
"cordnUi": {
|
||||
"title": "Prywatny czat",
|
||||
"subtitle": "Szyfrowany end-to-end (MLS) między członkami crew. Koordynator przekazuje wyłącznie szyfrogram i metadane — nigdy nie widzi treści wiadomości.",
|
||||
"notLoggedIn": "Zaloguj się, aby korzystać z prywatnego czatu crew.",
|
||||
"membersOnly": "Prywatny czat mogą otworzyć tylko członkowie crew.",
|
||||
"connecting": "Łączenie…",
|
||||
"noCoordinator": "Dla tego crew nie skonfigurowano jeszcze koordynatora.",
|
||||
"noGroupAdmin": "Prywatny czat tego crew nie został jeszcze utworzony.",
|
||||
"noGroupMember": "Nie należysz jeszcze do prywatnego czatu tego crew.",
|
||||
"create": "Utwórz prywatny czat",
|
||||
"requestJoin": "Poproś o dołączenie",
|
||||
"checkInvite": "Sprawdź zaproszenie",
|
||||
"requested": "Prośba wysłana — administrator crew ją zatwierdzi.",
|
||||
"noInvite": "Brak oczekującego zaproszenia. Poproś administratora o zatwierdzenie prośby.",
|
||||
"placeholder": "Napisz do crew…",
|
||||
"send": "Wyślij",
|
||||
"refresh": "Odśwież",
|
||||
"requests": "Prośby o dołączenie",
|
||||
"checkRequests": "Sprawdź prośby",
|
||||
"approve": "Dodaj",
|
||||
"noRequests": "Brak oczekujących próśb o dołączenie.",
|
||||
"inviteHint": "Na razie tylko ty jesteś w tym czacie — członkowie crew mogą dotknąć „Poproś o dołączenie”, a ty ich tu zatwierdzisz.",
|
||||
"memberCount": "{{count}} w grupie",
|
||||
"you": "Ty",
|
||||
"groupRef": "Link do grupy",
|
||||
"copyRef": "Kopiuj",
|
||||
"copied": "Skopiowano",
|
||||
"attachImage": "Dołącz obraz",
|
||||
"uploading": "Wysyłanie…",
|
||||
"uploadFailed": "Nie udało się wysłać obrazu.",
|
||||
"bannerTitle": "To crew nie ma jeszcze prywatnego czatu",
|
||||
"bannerBody": "Skonfiguruj szyfrowany end-to-end (MLS) czat dla swojego crew — członkowie dołączają z zakładki.",
|
||||
"bannerCta": "Skonfiguruj",
|
||||
"ready": "Połączono · MLS",
|
||||
"errorPrefix": "Nie udało się połączyć z koordynatorem",
|
||||
"interactiveHint": "Twój signer prosi o zatwierdzenie każdej akcji — używaj Odśwież i Wyślij w razie potrzeby."
|
||||
}
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,12 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
/**
|
||||
* pl translations — composed from fragments. Partial: missing keys fall
|
||||
* back to English; `check-i18n.mjs` reports coverage.
|
||||
*/
|
||||
const pl = {
|
||||
const pl = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -20,6 +19,8 @@ const pl = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default pl;
|
||||
|
|
|
|||
321
src/i18n/pt/drift.ts
Normal file
321
src/i18n/pt/drift.ts
Normal file
|
|
@ -0,0 +1,321 @@
|
|||
/**
|
||||
* pt — 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: "Buscar idiomas…",
|
||||
noLanguages: "Nenhum idioma encontrado",
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: "Lugares",
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: "Comece agora",
|
||||
firstRunAddSpot: "Adicione seu primeiro spot",
|
||||
firstRunJoinCrew: "Entrar em uma crew",
|
||||
firstRunStartCrew: "Comece sua crew",
|
||||
firstRunWallet: "Configure sua carteira",
|
||||
forecastDays: "Previsão de {{count}} dias",
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: "Previsão de {{count}} dias",
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: "revogado",
|
||||
stateVerifying: "verificando",
|
||||
},
|
||||
loadFailed: "Não foi possível alcançar os relays. Verifique sua conexão e tente novamente.",
|
||||
statusPending: "pendente",
|
||||
offers: {
|
||||
closeDeal: "Fechar negócio",
|
||||
loadFailed: "Não foi possível carregar as ofertas. Verifique sua conexão e tente novamente.",
|
||||
},
|
||||
pay: {
|
||||
nonSats: "Esta oferta está em {{currency}}. O pagamento no app é apenas em sats. Acerte diretamente com o vendedor.",
|
||||
unsupported: "Este código de pagamento (uma solicitação Cashu) ainda não é suportado. Peça ao vendedor uma fatura ou um endereço Lightning.",
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: "Os fundos estão bloqueados no escrow e salvos neste dispositivo, mas a solicitação não foi enviada. Reabra o anúncio para tentar de novo. Não pague novamente.",
|
||||
mintLabel: "Mint (onde os fundos estão bloqueados)",
|
||||
sellerMintHint: "O vendedor prefere este mint; fundos bloqueados aqui são os mais fáceis de ele resgatar.",
|
||||
mintHint: "O escrow fica neste mint. O vendedor resgata aqui, então escolha um em que vocês dois confiem.",
|
||||
noMints: "Nenhum mint disponível",
|
||||
p2pkUnsupported: "Este mint não anuncia suporte a P2PK (NUT-11), então o escrow não pode ser bloqueado aqui. Escolha outro mint.",
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: "Oferecer roupas",
|
||||
tabClothing: "Roupas",
|
||||
empty: {
|
||||
clothingTitle: "Ainda sem designers de roupas",
|
||||
clothingBody: "Seja o primeiro a oferecer roupas personalizadas, kits de time e apparel para a cena.",
|
||||
},
|
||||
craftFields: {
|
||||
sizing: "Faixa de tamanhos",
|
||||
samples: "Amostras / protótipos",
|
||||
customization: "Personalização",
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: "Coordenador do SkateSpots",
|
||||
ourDefaultDesc: "O SkateSpots mantém um coordenador em relay.skate-spots.org. Use-o por padrão, ou rode o seu — um coordenador só vê texto cifrado e metadados, nunca suas mensagens.",
|
||||
useOurs: "Usar o coordenador do SkateSpots",
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: "Chat criptografado",
|
||||
privateChatName: "Chat privado",
|
||||
privateChatDesc: "Chat de grupo com sigilo persistente (MLS) por meio de um coordenador.",
|
||||
privateChatDescFull: "O chat privado é criado uma vez por um admin, depois os membros entram.",
|
||||
chatRowDesc: "Todos na crew — selado com a chave de cada membro (NIP-17).",
|
||||
openChat: "Abrir",
|
||||
setUpChat: "Configurar",
|
||||
joinChat: "Entrar",
|
||||
checking: "Verificando…",
|
||||
openInAnotherApp: "Abrir em outro app",
|
||||
openInCordnWeb: "Cordn (web)",
|
||||
openCordnGroup: "Abrir o chat da crew",
|
||||
copyForStaircase: "Copiar para o Staircase",
|
||||
},
|
||||
dms: {
|
||||
refresh: "Atualizar",
|
||||
crews: "Crews",
|
||||
crewFounder: "Fundador",
|
||||
crewMember: "Membro",
|
||||
crewOpen: "Abrir",
|
||||
crewSetUp: "Configurar",
|
||||
},
|
||||
form: {
|
||||
cordnGroup: "Grupo Cordn",
|
||||
cordnGroupHint: "Opcional: cole o link do grupo do Staircase ou do Cordn web. Sua crew passa a ter um chat MLS real de ponta a ponta, hospedado no nosso coordenador.",
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: "Confiança",
|
||||
trustSub: "Fontes e exibição",
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: "Silenciar",
|
||||
muted: "Silenciado",
|
||||
mutedDesc: "Você não verá o conteúdo dela.",
|
||||
muteFailed: "Não foi possível silenciar. Tente novamente.",
|
||||
loginToMute: "Faça login para silenciar.",
|
||||
attributedNetwork: "De pessoas da sua rede",
|
||||
attributedProviderHouse: "Do provedor de confiança da comunidade",
|
||||
attributedProviderCustom: "Do provedor que você escolheu",
|
||||
howItWorks: "Como funciona a confiança",
|
||||
flaggedNoticeTitle: "Sinalizado por skatistas de confiança",
|
||||
flaggedNoticeDesc: "Cuidado. Pessoas de confiança na rede sinalizaram esta conta.",
|
||||
flaggedReporterFollow: "{{count}} que você segue",
|
||||
flaggedReporterNetwork: "{{count}} na sua rede",
|
||||
flaggedReporterOther: "{{count}} outras contas",
|
||||
flaggedReport: "Denunciar",
|
||||
flaggedDismiss: "Dispensar",
|
||||
bucketVerified: "Verificado",
|
||||
bucketUnknown: "Desconhecido",
|
||||
bucketFlagged: "Sinalizado",
|
||||
bucketVerifiedDesc: "Alguém da sua rede atesta por esta conta.",
|
||||
bucketUnknownDesc: "Ninguém da sua rede atestou por esta conta ainda.",
|
||||
bucketFlaggedDesc: "Pessoas de confiança sinalizaram esta conta.",
|
||||
reportedByTrusted: "Sinalizado por {{count}} pessoas de confiança",
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: "Alertas de rede",
|
||||
alertsDesc: "Contas que você segue e que pessoas de confiança sinalizaram ou silenciaram.",
|
||||
alertsEmpty: "Nenhum alerta. Verificamos as contas que você segue em busca de denúncias confiáveis.",
|
||||
alertsReported: "Sinalizado por {{count}} pessoas de confiança",
|
||||
alertsMuted: "Silenciado por {{count}} pessoas de confiança",
|
||||
alertsIgnore: "Ignorar",
|
||||
alertsUnfollow: "Deixar de seguir",
|
||||
alertsLogin: "Faça login para ver alertas das contas que você segue.",
|
||||
providerTitle: "Provedor",
|
||||
providerDesc: "As pontuações vêm de um provedor que você escolhe. O provedor da comunidade é o padrão.",
|
||||
useCommunity: "Usar o provedor da comunidade",
|
||||
setProvider: "Definir um provedor",
|
||||
customPubkeyPlaceholder: "npub ou chave pública hex do provedor",
|
||||
customRelayPlaceholder: "wss://relay.exemplo.com",
|
||||
invalidProvider: "Informe um npub válido ou chave pública hex de 64 caracteres, e um relay wss://.",
|
||||
publishFailed: "Não foi possível publicar o provedor. Tente novamente.",
|
||||
providerSaved: "Provedor atualizado.",
|
||||
loggedOutProvider: "Faça login para escolher um provedor.",
|
||||
showMarks: "Mostrar marcas de confiança",
|
||||
showMarksDesc: "Marcas verificadas e desconhecidas. As denúncias sempre aparecem.",
|
||||
sourceLabel: "Fonte",
|
||||
sourceHouse: "Provedor de confiança da comunidade",
|
||||
sourceCustom: "Seu provedor",
|
||||
loggedOut: "Faça login para escolher seu próprio provedor de confiança.",
|
||||
seoTitle: "Como funciona a confiança",
|
||||
seoDescription: "Como o SkateSpots mostra a confiança: três estados, de onde vêm as pontuações e por que a ausência não é desconfiança.",
|
||||
title: "Como funciona a confiança",
|
||||
intro: "Aqui a confiança é um sinal, não um veredito. Ela vem de quem você conhece, ou de um provedor que você escolhe. Não classificamos pessoas globalmente.",
|
||||
statesTitle: "Três estados",
|
||||
verifiedTitle: "Verificado",
|
||||
verifiedDesc: "Alguém da sua rede atesta por esta conta: um amigo de um amigo, ou o provedor que você escolheu.",
|
||||
unknownTitle: "Desconhecido",
|
||||
unknownDesc: "Ninguém atestou ainda. É aqui que toda conta nova começa.",
|
||||
flaggedTitle: "Sinalizado",
|
||||
flaggedDesc: "Pessoas de confiança sinalizaram esta conta. É um aviso para olhar com atenção, não uma prova.",
|
||||
absenceTitle: "Não ter selo não é desconfiança",
|
||||
absenceDesc: "A maioria das contas não mostra nada. Isso significa que ninguém da sua rede atestou ainda, não que algo esteja errado. Nunca leia uma marca ausente como negativa.",
|
||||
sourceTitle: "Quem calcula",
|
||||
sourceDesc: "Por padrão, usamos a sua própria rede. Você também pode escolher um provedor de confiança que publica pontuações assinadas no Nostr (NIP-85), ou desativar a exibição. Denúncias sempre aparecem, porque são um sinal de segurança.",
|
||||
endorsementTitle: "Presença não é endosso",
|
||||
endorsementDesc: "Uma marca verificada significa que alguém atestou, não que a pessoa seja boa. Uma sinalização significa que pessoas de confiança a denunciaram, não que ela seja culpada. Confira os detalhes antes de decidir.",
|
||||
povTitle: "Depende do ponto de vista",
|
||||
povDesc: "Uma pontuação é relativa a quem olha. Um ranking de um provedor ou de uma pessoa não é comparável a outro, e nunca apresentamos um como fato objetivo.",
|
||||
settingsCta: "Gerenciar nas configurações",
|
||||
},
|
||||
marketTerms: {
|
||||
link: "Diretrizes do Marketplace",
|
||||
seoTitle: "Diretrizes do Marketplace",
|
||||
seoDescription: "Como funcionam os anúncios de equipamentos do SkateSpots: entre pessoas, comprador atento, e as regras.",
|
||||
title: "Diretrizes do Marketplace",
|
||||
intro: "O SkateSpots é um mural de equipamentos entre pessoas. Você negocia direto com a outra pessoa: não retemos fundos, não enviamos itens nem resolvemos disputas.",
|
||||
howTitle: "Como funciona",
|
||||
howBody: "Publique equipamentos, fale com o vendedor por mensagem privada e acerte direto (dinheiro, Lightning ou troca). Não há carrinho nem checkout.",
|
||||
rulesTitle: "O que não é permitido",
|
||||
rulesBody: "Nada de conteúdo ilegal, perigoso ou adulto; nada de drogas, armas, falsificações ou itens roubados. Mantenha os anúncios sobre equipamentos de skate e itens relacionados.",
|
||||
respectTitle: "Seja respeitoso",
|
||||
respectBody: "Nada de abuso, assédio, ameaças ou ódio. Moderadores podem ocultar anúncios ou contas.",
|
||||
trustTitle: "Confiança é um guia, não uma garantia",
|
||||
trustBody: "Marcas de verificação e reputação de trocas são sinais da rede, não promessas. Faça suas próprias verificações antes de negociar.",
|
||||
trustLink: "Como funciona a confiança",
|
||||
privacyLink: "O que sai do seu dispositivo",
|
||||
safetyTitle: "Negocie com segurança",
|
||||
safetyBody: "Encontre-se em local público para as entregas, use escrow ou um depósito de boa-fé em negócios enviados, e nunca envie dinheiro fora do app.",
|
||||
moderationTitle: "A moderação é leve e reversível",
|
||||
moderationBody: "Conteúdo oculto permanece nos relays e pode ser restaurado; disputas entre pessoas são vocês que resolvem.",
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: "Camisetas",
|
||||
hoodies: "Moletons e blusas",
|
||||
pants: "Calças e shorts",
|
||||
jackets: "Jaquetas e agasalhos",
|
||||
kits: "Kits de time e camisas",
|
||||
caps: "Bonés e gorros",
|
||||
socks: "Meias",
|
||||
accessories: "Bolsas e acessórios",
|
||||
footwear: "Calçados",
|
||||
patches: "Patches e aplicações",
|
||||
griptape: "Vestuário de griptape e shape",
|
||||
onepiece: "Peças únicas / upcycled",
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: "Camisetas e tops personalizados",
|
||||
hoodies: "Moletons, blusões e calças de moletom",
|
||||
pants: "Calças de trabalho, cargos e shorts",
|
||||
jackets: "Jaquetas de coach, corta-vento e de trabalho",
|
||||
kits: "Kits de time, camisas e uniformes",
|
||||
caps: "Bonés, gorros e chapéus",
|
||||
socks: "Meias de crew e malhas",
|
||||
accessories: "Bolsas, cintos e pequenos itens",
|
||||
footwear: "Calçados personalizados",
|
||||
patches: "Patches bordados e aplicações",
|
||||
griptape: "Arte em griptape e vestuário de shape",
|
||||
onepiece: "Peças únicas e roupas upcycled",
|
||||
},
|
||||
method: {
|
||||
screenprint: "Serigrafia",
|
||||
dtg: "DTG / impressão direta em tecido",
|
||||
embroidery: "Bordado",
|
||||
cutsew: "Corte e costura",
|
||||
sublimation: "Sublimação",
|
||||
heattransfer: "Transfer térmico / vinil",
|
||||
garmentdye: "Tingimento da peça",
|
||||
knit: "Malharia",
|
||||
patchwork: "Patchwork",
|
||||
allover: "Estampa all-over",
|
||||
},
|
||||
material: {
|
||||
cotton: "Algodão",
|
||||
heavyweight: "Peso pesado",
|
||||
organic: "Orgânico / sustentável",
|
||||
fleece: "Fleece",
|
||||
denim: "Denim",
|
||||
canvas: "Canvas",
|
||||
nylon: "Nylon / técnico",
|
||||
wool: "Merino / lã",
|
||||
leather: "Couro",
|
||||
recycled: "Reciclado / deadstock",
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: "Seja designer de roupas - SkateSpots",
|
||||
seoDescription: "Roupas personalizadas, kits de time e apparel para a cena.",
|
||||
heading: "Designer de roupas",
|
||||
tagline: "Roupas personalizadas, kits de time e apparel para a cena",
|
||||
noun: "designer de roupas",
|
||||
rateLabel: "Tarifa",
|
||||
portfolioLabel: "Link da loja / portfólio",
|
||||
sectionWhatYouMake: "O que você faz",
|
||||
sectionHowYouMake: "Como você faz",
|
||||
sectionMaterials: "Materiais",
|
||||
minimumPlaceholder: "ex.: 10 peças",
|
||||
turnaroundPlaceholder: "ex.: 2-3 semanas",
|
||||
sizingPlaceholder: "ex.: XS-3XL / sob medida",
|
||||
samplesHelper: "Você oferece amostras ou protótipos antes de uma produção completa?",
|
||||
customizationPlaceholder: "ex.: nomes, números, gráficos",
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: "Atualizado",
|
||||
refresh: "Atualizar",
|
||||
unavailable: "Clima indisponível.",
|
||||
retry: "Tentar novamente",
|
||||
sunrise: "Nascer do sol",
|
||||
sunset: "Pôr do sol",
|
||||
legendTitle: "Pontuação do clima",
|
||||
legendWeatherOnly: "Apenas clima",
|
||||
},
|
||||
cordnUi: {
|
||||
title: "Chat privado",
|
||||
subtitle: "Criptografado de ponta a ponta (MLS) entre os membros da crew. O coordenador roteia apenas texto cifrado e metadados — nunca vê o conteúdo das mensagens.",
|
||||
notLoggedIn: "Faça login para usar o chat privado da crew.",
|
||||
membersOnly: "Apenas membros da crew podem abrir o chat privado.",
|
||||
connecting: "Conectando…",
|
||||
noCoordinator: "Nenhum coordenador está configurado para esta crew ainda.",
|
||||
noGroupAdmin: "O chat privado desta crew ainda não foi criado.",
|
||||
noGroupMember: "Você ainda não está no chat privado desta crew.",
|
||||
create: "Criar o chat privado",
|
||||
requestJoin: "Pedir para entrar",
|
||||
checkInvite: "Verificar convite",
|
||||
requested: "Solicitação enviada — um admin da crew vai aprovar.",
|
||||
noInvite: "Nenhum convite aguardando. Peça a um admin para aprovar sua solicitação.",
|
||||
placeholder: "Mensagem para a crew…",
|
||||
send: "Enviar",
|
||||
refresh: "Atualizar",
|
||||
requests: "Pedidos de entrada",
|
||||
checkRequests: "Verificar pedidos",
|
||||
approve: "Adicionar",
|
||||
noRequests: "Nenhum pedido de entrada pendente.",
|
||||
inviteHint: "Por enquanto só você está neste chat — os membros da crew podem tocar em “Pedir para entrar”, e você os aprova aqui.",
|
||||
memberCount: "{{count}} no grupo",
|
||||
you: "Você",
|
||||
groupRef: "Link do grupo",
|
||||
copyRef: "Copiar",
|
||||
copied: "Copiado",
|
||||
attachImage: "Anexar imagem",
|
||||
uploading: "Enviando…",
|
||||
uploadFailed: "Não foi possível enviar a imagem.",
|
||||
bannerTitle: "Esta crew ainda não tem chat privado",
|
||||
bannerBody: "Configure um chat criptografado de ponta a ponta (MLS) para sua crew — os membros entram pela aba.",
|
||||
bannerCta: "Configurar",
|
||||
ready: "Conectado · MLS",
|
||||
errorPrefix: "Não foi possível alcançar o coordenador",
|
||||
interactiveHint: "Seu signer pede aprovação a cada ação — use Atualizar e Enviar conforme necessário.",
|
||||
},
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,12 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
/**
|
||||
* pt translations — composed from fragments. Partial: missing keys fall
|
||||
* back to English; `check-i18n.mjs` reports coverage.
|
||||
*/
|
||||
const pt = {
|
||||
const pt = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -20,6 +19,8 @@ const pt = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default pt;
|
||||
|
|
|
|||
319
src/i18n/ro/drift.ts
Normal file
319
src/i18n/ro/drift.ts
Normal file
|
|
@ -0,0 +1,319 @@
|
|||
/**
|
||||
* ro — drift fill (245 keys added after en/es only).
|
||||
* Nested fragment spread additively into `ro/index.ts`.
|
||||
*/
|
||||
const drift = {
|
||||
"nav": {
|
||||
"searchLanguages": "Caută limbi...",
|
||||
"noLanguages": "Nu s-au găsit limbi"
|
||||
},
|
||||
"mapPage": {
|
||||
"searchSuggestPlaces": "Locuri"
|
||||
},
|
||||
"mapUi": {
|
||||
"firstRunTitle": "Începe",
|
||||
"firstRunAddSpot": "Adaugă primul tău spot",
|
||||
"firstRunJoinCrew": "Alătură-te unui crew",
|
||||
"firstRunStartCrew": "Începe-ți crew-ul",
|
||||
"firstRunWallet": "Configurează-ți portofelul",
|
||||
"forecastDays": "Prognoză pe {{count}} zile"
|
||||
},
|
||||
"spotUi": {
|
||||
"forecastDays": "Prognoză pe {{count}} zile"
|
||||
},
|
||||
"marketUi": {
|
||||
"trades": {
|
||||
"stateRevoked": "Revocat",
|
||||
"stateVerifying": "Se verifică"
|
||||
},
|
||||
"loadFailed": "Nu s-au putut atinge relay-urile. Verifică conexiunea și încearcă din nou.",
|
||||
"statusPending": "În așteptare",
|
||||
"offers": {
|
||||
"closeDeal": "Închide tranzacția",
|
||||
"loadFailed": "Ofertele nu s-au putut încărca. Verifică conexiunea și încearcă din nou."
|
||||
},
|
||||
"pay": {
|
||||
"nonSats": "Această ofertă este cotată în {{currency}}. Plata în aplicație este doar în sats. Rezolvă direct cu vânzătorul.",
|
||||
"unsupported": "Acest cod de plată (o cerere Cashu) nu este încă acceptat. Cere vânzătorului o factură Lightning sau o adresă."
|
||||
},
|
||||
"escrowRequest": {
|
||||
"lockedNotSent": "Fondurile sunt blocate în escrow și salvate pe acest dispozitiv, dar cererea nu s-a trimis. Redeschide anunțul pentru a reîncerca. Nu plăti din nou.",
|
||||
"mintLabel": "Mint (unde sunt blocate fondurile)",
|
||||
"sellerMintHint": "Vânzătorul preferă acest mint; fondurile blocate aici îi sunt cel mai ușor de revendicat.",
|
||||
"mintHint": "Escrow-ul se află la acest mint. Vânzătorul revendică aici, așa că alege unul în care aveți încredere amândoi.",
|
||||
"noMints": "Nu există mint-uri disponibile",
|
||||
"p2pkUnsupported": "Acest mint nu anunță suport P2PK (NUT-11), așa că escrow-ul nu poate fi blocat aici. Alege alt mint."
|
||||
}
|
||||
},
|
||||
"labUi": {
|
||||
"offerClothing": "Oferă îmbrăcăminte",
|
||||
"tabClothing": "Îmbrăcăminte",
|
||||
"empty": {
|
||||
"clothingTitle": "Încă niciun designer de îmbrăcăminte",
|
||||
"clothingBody": "Fii primul care oferă haine personalizate, echipamente de echipă și apparel pentru scenă."
|
||||
},
|
||||
"craftFields": {
|
||||
"sizing": "Gamă de mărimi",
|
||||
"samples": "Mostre / prototipuri",
|
||||
"customization": "Personalizare"
|
||||
}
|
||||
},
|
||||
"socialUi": {
|
||||
"coordinator": {
|
||||
"ourDefaultTitle": "Coordonator SkateSpots",
|
||||
"ourDefaultDesc": "SkateSpots rulează un coordonator la relay.skate-spots.org. Folosește-l implicit sau rulează-l pe al tău — un coordonator vede doar text cifrat și metadate, niciodată mesajele tale.",
|
||||
"useOurs": "Folosește coordonatorul SkateSpots"
|
||||
},
|
||||
"crewCoordinator": {
|
||||
"encryptedChat": "Chat criptat",
|
||||
"privateChatName": "Chat privat",
|
||||
"privateChatDesc": "Chat de grup cu forward secrecy (MLS) printr-un coordonator.",
|
||||
"privateChatDescFull": "Chatul privat este creat o dată de un admin, apoi membrii se alătură.",
|
||||
"chatRowDesc": "Toți din crew — sigilat cu cheia fiecărui membru (NIP-17).",
|
||||
"openChat": "Deschide",
|
||||
"setUpChat": "Configurează",
|
||||
"joinChat": "Alătură-te",
|
||||
"checking": "Se verifică…",
|
||||
"openInAnotherApp": "Deschide în altă aplicație",
|
||||
"openInCordnWeb": "Cordn (web)",
|
||||
"openCordnGroup": "Deschide chatul crew-ului",
|
||||
"copyForStaircase": "Copiază pentru Staircase"
|
||||
},
|
||||
"dms": {
|
||||
"refresh": "Reîmprospătează",
|
||||
"crews": "Crews",
|
||||
"crewFounder": "Fondator",
|
||||
"crewMember": "Membru",
|
||||
"crewOpen": "Deschide",
|
||||
"crewSetUp": "Configurează"
|
||||
},
|
||||
"form": {
|
||||
"cordnGroup": "Grup Cordn",
|
||||
"cordnGroupHint": "Opțional: lipește linkul grupului din Staircase sau Cordn web. Crew-ul tău primește atunci chat MLS real end-to-end, găzduit pe coordonatorul nostru."
|
||||
}
|
||||
},
|
||||
"settingsUi": {
|
||||
"settingsPage": {
|
||||
"trust": "Încredere",
|
||||
"trustSub": "Surse și afișare"
|
||||
}
|
||||
},
|
||||
"walletUi": {
|
||||
"trust": {
|
||||
"mute": "Oprește sunetul",
|
||||
"muted": "Fără sunet",
|
||||
"mutedDesc": "Nu le vei vedea conținutul.",
|
||||
"muteFailed": "Nu s-a putut opri sunetul. Încearcă din nou.",
|
||||
"loginToMute": "Autentifică-te pentru a opri sunetul.",
|
||||
"attributedNetwork": "De la persoane din rețeaua ta",
|
||||
"attributedProviderHouse": "De la furnizorul de încredere al comunității",
|
||||
"attributedProviderCustom": "De la furnizorul pe care l-ai ales",
|
||||
"howItWorks": "Cum funcționează încrederea",
|
||||
"flaggedNoticeTitle": "Raportat de skateri de încredere",
|
||||
"flaggedNoticeDesc": "Ai grijă. Persoane de încredere din rețea au raportat acest cont.",
|
||||
"flaggedReporterFollow": "{{count}} pe care îi urmărești",
|
||||
"flaggedReporterNetwork": "{{count}} din rețeaua ta",
|
||||
"flaggedReporterOther": "{{count}} alte conturi",
|
||||
"flaggedReport": "Raportează",
|
||||
"flaggedDismiss": "Respinge",
|
||||
"bucketVerified": "Verificat",
|
||||
"bucketUnknown": "Necunoscut",
|
||||
"bucketFlagged": "Semnalat",
|
||||
"bucketVerifiedDesc": "Cineva din rețeaua ta garantează pentru acest cont.",
|
||||
"bucketUnknownDesc": "Nimeni din rețeaua ta nu a garantat încă pentru acest cont.",
|
||||
"bucketFlaggedDesc": "Persoane de încredere au raportat acest cont.",
|
||||
"reportedByTrusted": "Raportat de {{count}} persoane de încredere"
|
||||
}
|
||||
},
|
||||
"trustUi": {
|
||||
"alertsTitle": "Alerte de rețea",
|
||||
"alertsDesc": "Conturi pe care le urmărești și pe care persoane de încredere le-au raportat sau le-au pus pe silențios.",
|
||||
"alertsEmpty": "Nicio alertă. Verificăm conturile pe care le urmărești pentru raportări de la persoane de încredere.",
|
||||
"alertsReported": "Raportat de {{count}} persoane de încredere",
|
||||
"alertsMuted": "Fără sunet din partea a {{count}} persoane de încredere",
|
||||
"alertsIgnore": "Ignoră",
|
||||
"alertsUnfollow": "Nu mai urmări",
|
||||
"alertsLogin": "Autentifică-te pentru a vedea alertele pentru conturile pe care le urmărești.",
|
||||
"providerTitle": "Furnizor",
|
||||
"providerDesc": "Scorurile vin de la un furnizor pe care îl alegi. Furnizorul comunității este implicit.",
|
||||
"useCommunity": "Folosește furnizorul comunității",
|
||||
"setProvider": "Setează un furnizor",
|
||||
"customPubkeyPlaceholder": "npub sau cheie publică hex a furnizorului",
|
||||
"customRelayPlaceholder": "wss://relay.example.com",
|
||||
"invalidProvider": "Introdu un npub valid sau o cheie publică hex de 64 de caractere și un relay wss://.",
|
||||
"publishFailed": "Furnizorul nu a putut fi publicat. Încearcă din nou.",
|
||||
"providerSaved": "Furnizor actualizat.",
|
||||
"loggedOutProvider": "Autentifică-te pentru a alege un furnizor.",
|
||||
"showMarks": "Arată marcajele de încredere",
|
||||
"showMarksDesc": "Marcaje verificate și necunoscute. Raportările se afișează mereu.",
|
||||
"sourceLabel": "Sursă",
|
||||
"sourceHouse": "Furnizorul de încredere al comunității",
|
||||
"sourceCustom": "Furnizorul tău",
|
||||
"loggedOut": "Autentifică-te pentru a-ți alege propriul furnizor de încredere.",
|
||||
"seoTitle": "Cum funcționează încrederea",
|
||||
"seoDescription": "Cum afișează SkateSpots încrederea: trei stări, de unde vin scorurile și de ce absența nu înseamnă neîncredere.",
|
||||
"title": "Cum funcționează încrederea",
|
||||
"intro": "Încrederea aici este un semnal, nu o sentință. Vine de la cine îi cunoști sau de la un furnizor pe care îl alegi. Nu clasificăm oamenii la nivel global.",
|
||||
"statesTitle": "Trei stări",
|
||||
"verifiedTitle": "Verificat",
|
||||
"verifiedDesc": "Cineva din rețeaua ta garantează pentru acest cont: un prieten al unui prieten sau furnizorul tău ales.",
|
||||
"unknownTitle": "Necunoscut",
|
||||
"unknownDesc": "Nimeni nu a garantat încă. Aici începe fiecare cont nou.",
|
||||
"flaggedTitle": "Semnalat",
|
||||
"flaggedDesc": "Persoane de încredere au raportat acest cont. Este un avertisment să te uiți mai atent, nu o dovadă pentru nimic.",
|
||||
"absenceTitle": "Lipsa unei insigne nu înseamnă neîncredere",
|
||||
"absenceDesc": "Majoritatea conturilor nu arată nimic. Asta înseamnă că nimeni din rețeaua ta nu a garantat încă pentru ele, nu că ceva este în neregulă. Nu interpreta niciodată un marcaj lipsă ca pe un lucru negativ.",
|
||||
"sourceTitle": "Cine îl calculează",
|
||||
"sourceDesc": "Implicit folosim propria ta rețea. Poți alege și un furnizor de încredere care publică scoruri semnate prin Nostr (NIP-85) sau poți opri afișarea. Semnalat se afișează mereu, pentru că este un semnal de siguranță.",
|
||||
"endorsementTitle": "Prezența nu este o susținere",
|
||||
"endorsementDesc": "Un marcaj verificat înseamnă că cineva a garantat, nu că persoana este bună. Un marcaj înseamnă că persoane de încredere au raportat-o, nu că este vinovată. Verifică detaliile înainte de a decide.",
|
||||
"povTitle": "Depinde de punctul de vedere",
|
||||
"povDesc": "Un scor este relativ la cine se uită. Un rang de la un furnizor sau o persoană nu este comparabil cu altul și nu îl prezentăm niciodată ca pe un fapt obiectiv.",
|
||||
"settingsCta": "Gestionează în Setări"
|
||||
},
|
||||
"marketTerms": {
|
||||
"link": "Regulile Marketplace",
|
||||
"seoTitle": "Regulile Marketplace",
|
||||
"seoDescription": "Cum funcționează anunțurile de echipament SkateSpots: peer-to-peer, cumpărătorul să fie atent, și regulile.",
|
||||
"title": "Regulile Marketplace",
|
||||
"intro": "SkateSpots este o tablă de echipament peer-to-peer. Tratezi direct cu cealaltă persoană: nu ținem fonduri, nu expediem articole și nu rezolvăm dispute.",
|
||||
"howTitle": "Cum funcționează",
|
||||
"howBody": "Listează echipament, contactează vânzătorul într-un mesaj privat și rezolvă direct (numerar, Lightning sau un schimb). Nu există coș sau checkout.",
|
||||
"rulesTitle": "Ce nu este permis",
|
||||
"rulesBody": "Fără conținut ilegal, periculos sau pentru adulți; fără droguri, arme, produse contrafăcute sau furate. Ține anunțurile despre echipament de skate și articole conexe.",
|
||||
"respectTitle": "Fii respectuos",
|
||||
"respectBody": "Fără abuz, hărțuire, amenințări sau ură. Moderatorii pot ascunde anunțuri sau conturi.",
|
||||
"trustTitle": "Încrederea este un ghid, nu o garanție",
|
||||
"trustBody": "Marcajele de verificare și reputația de tranzacționare sunt semnale din rețea, nu promisiuni. Fă-ți propriile verificări înainte de a tranzacționa.",
|
||||
"trustLink": "Cum funcționează încrederea",
|
||||
"privacyLink": "Ce pleacă de pe dispozitivul tău",
|
||||
"safetyTitle": "Tranzacționează în siguranță",
|
||||
"safetyBody": "Întâlnește-te în public pentru predare, folosește escrow sau un depozit de bună-credință pentru livrări și nu trimite niciodată bani în afara aplicației.",
|
||||
"moderationTitle": "Moderarea este blândă și reversibilă",
|
||||
"moderationBody": "Conținutul ascuns rămâne pe relay-uri și poate fi restaurat; disputele dintre oameni sunt ale tale de rezolvat."
|
||||
},
|
||||
"labOptions": {
|
||||
"clothing": {
|
||||
"service": {
|
||||
"tees": "Tricouri",
|
||||
"hoodies": "Hanorace și treninguri",
|
||||
"pants": "Pantaloni și șorturi",
|
||||
"jackets": "Jachete și haine de exterior",
|
||||
"kits": "Echipamente și tricouri de echipă",
|
||||
"caps": "Șepci și căciuli",
|
||||
"socks": "Șosete",
|
||||
"accessories": "Genți și accesorii",
|
||||
"footwear": "Încălțăminte și pantofi",
|
||||
"patches": "Patch-uri și aplicații",
|
||||
"griptape": "Griptape și îmbrăcăminte pentru deck",
|
||||
"onepiece": "Piese unicate / upcycled"
|
||||
},
|
||||
"serviceDesc": {
|
||||
"tees": "Tricouri și topuri personalizate",
|
||||
"hoodies": "Hanorace, treninguri și pantaloni de trening",
|
||||
"pants": "Pantaloni de lucru, cargo și șorturi",
|
||||
"jackets": "Jachete de antrenor, shell și de lucru",
|
||||
"kits": "Echipamente, tricouri și uniforme de echipă",
|
||||
"caps": "Șepci, căciuli și acoperitoare de cap",
|
||||
"socks": "Șosete și tricotaje",
|
||||
"accessories": "Genți, curele și obiecte mici",
|
||||
"footwear": "Pantofi și încălțăminte personalizată",
|
||||
"patches": "Patch-uri brodate și aplicații",
|
||||
"griptape": "Artă pe griptape și îmbrăcăminte pentru deck",
|
||||
"onepiece": "Piese singulare și haine upcycled"
|
||||
},
|
||||
"method": {
|
||||
"screenprint": "Serigrafie",
|
||||
"dtg": "DTG / direct-to-garment",
|
||||
"embroidery": "Broderie",
|
||||
"cutsew": "Cut & sew",
|
||||
"sublimation": "Sublimare",
|
||||
"heattransfer": "Heat transfer / vinil",
|
||||
"garmentdye": "Vopsire vestimentară",
|
||||
"knit": "Tricotaj",
|
||||
"patchwork": "Patchwork",
|
||||
"allover": "Print all-over"
|
||||
},
|
||||
"material": {
|
||||
"cotton": "Bumbac",
|
||||
"heavyweight": "Greutate mare",
|
||||
"organic": "Organic / durabil",
|
||||
"fleece": "Fleece",
|
||||
"denim": "Denim",
|
||||
"canvas": "Canvas",
|
||||
"nylon": "Nylon / tehnic",
|
||||
"wool": "Merino / lână",
|
||||
"leather": "Piele",
|
||||
"recycled": "Reciclat / deadstock"
|
||||
}
|
||||
}
|
||||
},
|
||||
"becomeRolesUi": {
|
||||
"clothing": {
|
||||
"seoTitle": "Devino designer de îmbrăcăminte - SkateSpots",
|
||||
"seoDescription": "Haine personalizate, echipamente de echipă și apparel pentru scenă.",
|
||||
"heading": "Designer de îmbrăcăminte",
|
||||
"tagline": "Haine personalizate, echipamente de echipă și apparel pentru scenă",
|
||||
"noun": "designer de îmbrăcăminte",
|
||||
"rateLabel": "Tarif",
|
||||
"portfolioLabel": "Link magazin / portofoliu",
|
||||
"sectionWhatYouMake": "Ce realizezi",
|
||||
"sectionHowYouMake": "Cum realizezi",
|
||||
"sectionMaterials": "Materiale",
|
||||
"minimumPlaceholder": "de ex. 10 bucăți",
|
||||
"turnaroundPlaceholder": "de ex. 2-3 săptămâni",
|
||||
"sizingPlaceholder": "de ex. XS-3XL / la comandă",
|
||||
"samplesHelper": "Oferi mostre sau prototipuri înainte de o serie completă?",
|
||||
"customizationPlaceholder": "de ex. nume, numere, grafică"
|
||||
}
|
||||
},
|
||||
"weatherUi": {
|
||||
"updated": "Actualizat",
|
||||
"refresh": "Reîmprospătează",
|
||||
"unavailable": "Vremea indisponibilă.",
|
||||
"retry": "Reîncearcă",
|
||||
"sunrise": "Răsărit",
|
||||
"sunset": "Apus",
|
||||
"legendTitle": "Scor meteo",
|
||||
"legendWeatherOnly": "Doar vremea"
|
||||
},
|
||||
"cordnUi": {
|
||||
"title": "Chat privat",
|
||||
"subtitle": "Criptat end-to-end (MLS) între membrii crew-ului. Coordonatorul transportă doar text cifrat și metadate — nu vede niciodată conținutul mesajelor.",
|
||||
"notLoggedIn": "Autentifică-te pentru a folosi chatul privat al crew-ului.",
|
||||
"membersOnly": "Doar membrii crew-ului pot deschide chatul privat.",
|
||||
"connecting": "Se conectează…",
|
||||
"noCoordinator": "Nu este configurat încă un coordonator pentru acest crew.",
|
||||
"noGroupAdmin": "Chatul privat al acestui crew nu a fost încă creat.",
|
||||
"noGroupMember": "Nu ești încă în chatul privat al acestui crew.",
|
||||
"create": "Creează chatul privat",
|
||||
"requestJoin": "Cere să te alături",
|
||||
"checkInvite": "Verifică invitația",
|
||||
"requested": "Cerere trimisă — un admin de crew o va aproba.",
|
||||
"noInvite": "Nicio invitație în așteptare încă. Cere unui admin să aprobe cererea ta.",
|
||||
"placeholder": "Trimite un mesaj crew-ului…",
|
||||
"send": "Trimite",
|
||||
"refresh": "Reîmprospătează",
|
||||
"requests": "Cereri de alăturare",
|
||||
"checkRequests": "Verifică cererile",
|
||||
"approve": "Adaugă",
|
||||
"noRequests": "Nicio cerere de alăturare în așteptare.",
|
||||
"inviteHint": "Momentan doar tu ești în acest chat — membrii crew-ului pot apăsa „Cere să te alături”, apoi îi aprobi aici.",
|
||||
"memberCount": "{{count}} în grup",
|
||||
"you": "Tu",
|
||||
"groupRef": "Link de grup",
|
||||
"copyRef": "Copiază",
|
||||
"copied": "Copiat",
|
||||
"attachImage": "Atașează imagine",
|
||||
"uploading": "Se încarcă…",
|
||||
"uploadFailed": "Imaginea nu a putut fi încărcată.",
|
||||
"bannerTitle": "Acest crew nu are încă un chat privat",
|
||||
"bannerBody": "Configurează chat criptat end-to-end (MLS) pentru crew-ul tău — membrii se alătură din filă.",
|
||||
"bannerCta": "Configurează",
|
||||
"ready": "Conectat · MLS",
|
||||
"errorPrefix": "Coordonatorul nu a putut fi contactat",
|
||||
"interactiveHint": "Signerul tău cere aprobare la fiecare acțiune — folosește Reîmprospătează și Trimite după nevoie."
|
||||
}
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,8 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
const ro = {
|
||||
const ro = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -16,6 +19,8 @@ const ro = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default ro;
|
||||
|
|
|
|||
323
src/i18n/ru/drift.ts
Normal file
323
src/i18n/ru/drift.ts
Normal file
|
|
@ -0,0 +1,323 @@
|
|||
/**
|
||||
* ru — translation drift fragment.
|
||||
*
|
||||
* The keys added to `en` after the original batch pass. Kept in their own
|
||||
* module so this pass never touches the batch files. Composed into `ru` in
|
||||
* `index.ts` via a deep merge (a shallow spread would clobber the sibling
|
||||
* keys already present in the batches, e.g. `socialUi`, `walletUi`).
|
||||
*/
|
||||
const drift = {
|
||||
nav: {
|
||||
searchLanguages: "Поиск языков...",
|
||||
noLanguages: "Языки не найдены",
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: "Места",
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: "Начните",
|
||||
firstRunAddSpot: "Добавьте первый Spot",
|
||||
firstRunJoinCrew: "Присоединиться к Crew",
|
||||
firstRunStartCrew: "Создать свой Crew",
|
||||
firstRunWallet: "Настройте кошелёк",
|
||||
forecastDays: "Прогноз на {{count}} дней",
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: "Прогноз на {{count}} дней",
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: "отозвано",
|
||||
stateVerifying: "проверка",
|
||||
},
|
||||
loadFailed: "Не удалось связаться с релеями. Проверьте соединение и попробуйте снова.",
|
||||
statusPending: "в ожидании",
|
||||
offers: {
|
||||
closeDeal: "Закрыть сделку",
|
||||
loadFailed: "Не удалось загрузить предложения. Проверьте соединение и попробуйте снова.",
|
||||
},
|
||||
pay: {
|
||||
nonSats: "Это предложение оценено в {{currency}}. Оплата в приложении только в sats. Расплатитесь напрямую с продавцом.",
|
||||
unsupported: "Этот платёжный код (запрос Cashu) пока не поддерживается. Попросите у продавца Lightning-счёт или адрес.",
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: "Средства заблокированы в escrow и сохранены на этом устройстве, но запрос не отправился. Откройте объявление снова, чтобы повторить. Не платите ещё раз.",
|
||||
mintLabel: "Mint (где заблокированы средства)",
|
||||
sellerMintHint: "Продавец предпочитает этот mint; средства, заблокированные здесь, ему проще всего получить.",
|
||||
mintHint: "Escrow хранится в этом mint. Продавец погашает здесь, так что выберите тот, которому доверяете оба.",
|
||||
noMints: "Нет доступных mint",
|
||||
p2pkUnsupported: "Этот mint не заявляет поддержку P2PK (NUT-11), поэтому escrow здесь нельзя заблокировать. Выберите другой mint.",
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: "Предложить одежду",
|
||||
tabClothing: "Одежда",
|
||||
empty: {
|
||||
clothingTitle: "Дизайнеров одежды пока нет",
|
||||
clothingBody: "Станьте первым, кто предложит кастомную одежду, командные комплекты и экипировку для сцены.",
|
||||
},
|
||||
craftFields: {
|
||||
sizing: "Диапазон размеров",
|
||||
samples: "Образцы / прототипы",
|
||||
customization: "Кастомизация",
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: "Координатор SkateSpots",
|
||||
ourDefaultDesc: "SkateSpots запускает координатор на relay.skate-spots.org. Используйте его по умолчанию или запустите свой — координатор видит только шифротекст и метаданные, никогда ваши сообщения.",
|
||||
useOurs: "Использовать координатор SkateSpots",
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: "Зашифрованный чат",
|
||||
privateChatName: "Приватный чат",
|
||||
privateChatDesc: "Групповой чат с прямой секретностью (MLS) через координатор.",
|
||||
privateChatDescFull: "Приватный чат создаётся один раз администратором, затем участники присоединяются.",
|
||||
chatRowDesc: "Все в Crew — запечатано ключом каждого участника (NIP-17).",
|
||||
openChat: "Открыть",
|
||||
setUpChat: "Настроить",
|
||||
joinChat: "Присоединиться",
|
||||
checking: "Проверка…",
|
||||
openInAnotherApp: "Открыть в другом приложении",
|
||||
openInCordnWeb: "Cordn (веб)",
|
||||
openCordnGroup: "Открыть чат Crew",
|
||||
copyForStaircase: "Копировать для Staircase",
|
||||
},
|
||||
dms: {
|
||||
refresh: "Обновить",
|
||||
crews: "Crew",
|
||||
crewFounder: "Основатель",
|
||||
crewMember: "Участник",
|
||||
crewOpen: "Открыть",
|
||||
crewSetUp: "Настроить",
|
||||
},
|
||||
form: {
|
||||
cordnGroup: "Группа Cordn",
|
||||
cordnGroupHint: "Необязательно: вставьте ссылку на группу из Staircase или Cordn (веб). Тогда ваш Crew получит настоящий сквозной MLS-чат на нашем координаторе.",
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: "Доверие",
|
||||
trustSub: "Источники и отображение",
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: "Заглушить",
|
||||
muted: "Заглушено",
|
||||
mutedDesc: "Вы не будете видеть их контент.",
|
||||
muteFailed: "Не удалось заглушить. Попробуйте снова.",
|
||||
loginToMute: "Войдите, чтобы заглушить.",
|
||||
attributedNetwork: "От людей из вашей сети",
|
||||
attributedProviderHouse: "От общественного провайдера доверия",
|
||||
attributedProviderCustom: "От выбранного вами провайдера",
|
||||
howItWorks: "Как работает доверие",
|
||||
flaggedNoticeTitle: "Сообщено доверенными скейтерами",
|
||||
flaggedNoticeDesc: "Будьте осторожны. Доверенные люди в сети сообщили об этом аккаунте.",
|
||||
flaggedReporterFollow: "{{count}} из ваших подписок",
|
||||
flaggedReporterNetwork: "{{count}} из вашей сети",
|
||||
flaggedReporterOther: "{{count}} других аккаунтов",
|
||||
flaggedReport: "Пожаловаться",
|
||||
flaggedDismiss: "Скрыть",
|
||||
bucketVerified: "Подтверждён",
|
||||
bucketUnknown: "Неизвестен",
|
||||
bucketFlagged: "Отмечен",
|
||||
bucketVerifiedDesc: "Кто-то из вашей сети поручился за этот аккаунт.",
|
||||
bucketUnknownDesc: "Пока никто из вашей сети не поручился за этот аккаунт.",
|
||||
bucketFlaggedDesc: "Доверенные люди сообщили об этом аккаунте.",
|
||||
reportedByTrusted: "Сообщено {{count}} доверенными людьми",
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: "Сетевые оповещения",
|
||||
alertsDesc: "Аккаунты, на которые вы подписаны, о которых сообщили или которых заглушили доверенные люди.",
|
||||
alertsEmpty: "Нет оповещений. Мы проверяем аккаунты, на которые вы подписаны, на сообщения от доверенных людей.",
|
||||
alertsReported: "Сообщено {{count}} доверенными людьми",
|
||||
alertsMuted: "Заглушено {{count}} доверенными людьми",
|
||||
alertsIgnore: "Игнорировать",
|
||||
alertsUnfollow: "Отписаться",
|
||||
alertsLogin: "Войдите, чтобы видеть оповещения по аккаунтам, на которые вы подписаны.",
|
||||
providerTitle: "Провайдер",
|
||||
providerDesc: "Оценки приходят от выбранного вами провайдера. Общественный провайдер используется по умолчанию.",
|
||||
useCommunity: "Использовать общественный провайдер",
|
||||
setProvider: "Указать провайдера",
|
||||
customPubkeyPlaceholder: "npub или hex-публичный ключ провайдера",
|
||||
customRelayPlaceholder: "wss://relay.example.com",
|
||||
invalidProvider: "Введите корректный npub или 64-символьный hex-публичный ключ и релей wss://.",
|
||||
publishFailed: "Не удалось опубликовать провайдера. Попробуйте снова.",
|
||||
providerSaved: "Провайдер обновлён.",
|
||||
loggedOutProvider: "Войдите, чтобы выбрать провайдера.",
|
||||
showMarks: "Показывать метки доверия",
|
||||
showMarksDesc: "Подтверждённые и неизвестные метки. Сообщения показываются всегда.",
|
||||
sourceLabel: "Источник",
|
||||
sourceHouse: "Общественный провайдер доверия",
|
||||
sourceCustom: "Ваш провайдер",
|
||||
loggedOut: "Войдите, чтобы выбрать своего провайдера доверия.",
|
||||
seoTitle: "Как работает доверие",
|
||||
seoDescription: "Как SkateSpots показывает доверие: три состояния, откуда берутся оценки и почему отсутствие метки — не недоверие.",
|
||||
title: "Как работает доверие",
|
||||
intro: "Доверие здесь — сигнал, а не приговор. Оно исходит от тех, кого вы знаете, или от выбранного вами провайдера. Мы не составляем глобальный рейтинг людей.",
|
||||
statesTitle: "Три состояния",
|
||||
verifiedTitle: "Подтверждён",
|
||||
verifiedDesc: "Кто-то из вашей сети поручился за этот аккаунт: друг друга или выбранный вами провайдер.",
|
||||
unknownTitle: "Неизвестен",
|
||||
unknownDesc: "Пока никто не поручился. С этого начинается каждый новый аккаунт.",
|
||||
flaggedTitle: "Отмечен",
|
||||
flaggedDesc: "Доверенные люди сообщили об этом аккаунте. Это предупреждение присмотреться, а не доказательство чего-либо.",
|
||||
absenceTitle: "Отсутствие метки — не недоверие",
|
||||
absenceDesc: "У большинства аккаунтов нет никаких меток. Это значит, что никто из вашей сети пока не поручился за них, а не то, что что-то не так. Никогда не воспринимайте отсутствие метки как минус.",
|
||||
sourceTitle: "Кто это вычисляет",
|
||||
sourceDesc: "По умолчанию мы используем вашу собственную сеть. Вы также можете выбрать провайдера доверия, который публикует подписанные оценки через Nostr (NIP-85), или отключить отображение. Отмеченное показывается всегда, потому что это сигнал безопасности.",
|
||||
endorsementTitle: "Присутствие — не одобрение",
|
||||
endorsementDesc: "Подтверждённая метка означает, что кто-то поручился, а не что человек хороший. Метка «отмечен» означает, что доверенные люди сообщили о нём, а не что он виновен. Проверьте детали, прежде чем решать.",
|
||||
povTitle: "Всё зависит от точки зрения",
|
||||
povDesc: "Оценка относительна тому, кто смотрит. Рейтинг от одного провайдера или человека несравним с другим, и мы никогда не подаём его как объективный факт.",
|
||||
settingsCta: "Управлять в настройках",
|
||||
},
|
||||
marketTerms: {
|
||||
link: "Правила маркетплейса",
|
||||
seoTitle: "Правила маркетплейса",
|
||||
seoDescription: "Как работают объявления снаряжения на SkateSpots: напрямую между людьми, покупатель будь внимателен, и правила.",
|
||||
title: "Правила маркетплейса",
|
||||
intro: "SkateSpots — доска объявлений о снаряжении напрямую между людьми. Вы имеете дело напрямую с другим человеком: мы не держим средства, не отправляем товары и не решаем споры.",
|
||||
howTitle: "Как это работает",
|
||||
howBody: "Выставьте снаряжение, свяжитесь с продавцом в личном сообщении и расплатитесь напрямую (наличные, Lightning или обмен). Корзины и оформления заказа нет.",
|
||||
rulesTitle: "Что запрещено",
|
||||
rulesBody: "Никакого незаконного, опасного или взрослого контента; никаких наркотиков, оружия, поддельных или краденых товаров. Объявления должны касаться скейт-снаряжения и связанных с ним вещей.",
|
||||
respectTitle: "Уважайте других",
|
||||
respectBody: "Никаких оскорблений, преследования, угроз или ненависти. Модераторы могут скрывать объявления или аккаунты.",
|
||||
trustTitle: "Доверие — ориентир, а не гарантия",
|
||||
trustBody: "Метки подтверждения и торговая репутация — это сигналы из сети, а не обещания. Проверяйте сами, прежде чем совершать сделку.",
|
||||
trustLink: "Как работает доверие",
|
||||
privacyLink: "Что покидает ваше устройство",
|
||||
safetyTitle: "Торгуйте безопасно",
|
||||
safetyBody: "Встречайтесь в общественных местах для передачи, используйте escrow или добросовестный задаток для отправляемых сделок и никогда не отправляйте деньги вне приложения.",
|
||||
moderationTitle: "Модерация мягкая и обратимая",
|
||||
moderationBody: "Скрытый контент остаётся на релеях и может быть восстановлен; споры между людьми — ваша забота.",
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: "Футболки",
|
||||
hoodies: "Худи и свитшоты",
|
||||
pants: "Штаны и шорты",
|
||||
jackets: "Куртки и верхняя одежда",
|
||||
kits: "Командные комплекты и джерси",
|
||||
caps: "Кепки и шапки",
|
||||
socks: "Носки",
|
||||
accessories: "Сумки и аксессуары",
|
||||
footwear: "Обувь",
|
||||
patches: "Патчи и аппликации",
|
||||
griptape: "Гриптейп и одежда для дек",
|
||||
onepiece: "Единичные экземпляры / апсайклинг",
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: "Кастомные футболки и топы",
|
||||
hoodies: "Худи, свитшоты и спортивные штаны",
|
||||
pants: "Рабочие штаны, карго и шорты",
|
||||
jackets: "Куртки-коучевки, ветровки и рабочие куртки",
|
||||
kits: "Командные комплекты, джерси и форма",
|
||||
caps: "Кепки, шапки и головные уборы",
|
||||
socks: "Высокие носки и трикотаж",
|
||||
accessories: "Сумки, ремни и мелочи",
|
||||
footwear: "Кастомная обувь",
|
||||
patches: "Вышитые патчи и аппликации",
|
||||
griptape: "Арт на гриптейпе и одежда для дек",
|
||||
onepiece: "Единичные вещи и апсайкл-одежда",
|
||||
},
|
||||
method: {
|
||||
screenprint: "Шелкография",
|
||||
dtg: "DTG / прямая печать по ткани",
|
||||
embroidery: "Вышивка",
|
||||
cutsew: "Крой и шитьё",
|
||||
sublimation: "Сублимация",
|
||||
heattransfer: "Термотрансфер / винил",
|
||||
garmentdye: "Крашение изделий",
|
||||
knit: "Трикотаж",
|
||||
patchwork: "Пэчворк",
|
||||
allover: "Печать по всей поверхности",
|
||||
},
|
||||
material: {
|
||||
cotton: "Хлопок",
|
||||
heavyweight: "Плотная ткань",
|
||||
organic: "Органика / устойчивость",
|
||||
fleece: "Флис",
|
||||
denim: "Деним",
|
||||
canvas: "Канвас",
|
||||
nylon: "Нейлон / технические ткани",
|
||||
wool: "Меринос / шерсть",
|
||||
leather: "Кожа",
|
||||
recycled: "Переработанное / сток",
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: "Стать дизайнером одежды - SkateSpots",
|
||||
seoDescription: "Кастомная одежда, командные комплекты и экипировка для сцены.",
|
||||
heading: "Дизайнер одежды",
|
||||
tagline: "Кастомная одежда, командные комплекты и экипировка для сцены",
|
||||
noun: "дизайнер одежды",
|
||||
rateLabel: "Ставка",
|
||||
portfolioLabel: "Ссылка на магазин / портфолио",
|
||||
sectionWhatYouMake: "Что вы создаёте",
|
||||
sectionHowYouMake: "Как вы это делаете",
|
||||
sectionMaterials: "Материалы",
|
||||
minimumPlaceholder: "напр. 10 штук",
|
||||
turnaroundPlaceholder: "напр. 2–3 недели",
|
||||
sizingPlaceholder: "напр. XS–3XL / по меркам",
|
||||
samplesHelper: "Предлагаете ли вы образцы или прототипы перед полным тиражом?",
|
||||
customizationPlaceholder: "напр. имена, номера, графика",
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: "Обновлено",
|
||||
refresh: "Обновить",
|
||||
unavailable: "Погода недоступна.",
|
||||
retry: "Повторить",
|
||||
sunrise: "Восход",
|
||||
sunset: "Закат",
|
||||
legendTitle: "Оценка погоды",
|
||||
legendWeatherOnly: "Только погода",
|
||||
},
|
||||
cordnUi: {
|
||||
title: "Приватный чат",
|
||||
subtitle: "Сквозное шифрование (MLS) между участниками Crew. Координатор маршрутизирует только шифротекст и метаданные — он никогда не видит содержимое сообщений.",
|
||||
notLoggedIn: "Войдите, чтобы использовать приватный чат Crew.",
|
||||
membersOnly: "Только участники Crew могут открыть приватный чат.",
|
||||
connecting: "Подключение…",
|
||||
noCoordinator: "Для этого Crew пока не настроен координатор.",
|
||||
noGroupAdmin: "Приватный чат этого Crew ещё не создан.",
|
||||
noGroupMember: "Вы ещё не в приватном чате этого Crew.",
|
||||
create: "Создать приватный чат",
|
||||
requestJoin: "Попросить присоединиться",
|
||||
checkInvite: "Проверить приглашение",
|
||||
requested: "Запрос отправлен — администратор Crew одобрит его.",
|
||||
noInvite: "Приглашение пока не ждёт. Попросите администратора одобрить ваш запрос.",
|
||||
placeholder: "Сообщение для Crew…",
|
||||
send: "Отправить",
|
||||
refresh: "Обновить",
|
||||
requests: "Запросы на присоединение",
|
||||
checkRequests: "Проверить запросы",
|
||||
approve: "Добавить",
|
||||
noRequests: "Нет ожидающих запросов на присоединение.",
|
||||
inviteHint: "Пока в этом чате только вы — участники Crew могут нажать «Попросить присоединиться», а вы одобрите их здесь.",
|
||||
memberCount: "{{count}} в группе",
|
||||
you: "Вы",
|
||||
groupRef: "Ссылка на группу",
|
||||
copyRef: "Копировать",
|
||||
copied: "Скопировано",
|
||||
attachImage: "Прикрепить изображение",
|
||||
uploading: "Загрузка…",
|
||||
uploadFailed: "Не удалось загрузить изображение.",
|
||||
bannerTitle: "У этого Crew ещё нет приватного чата",
|
||||
bannerBody: "Настройте сквозной зашифрованный (MLS) чат для вашего Crew — участники присоединяются со вкладки.",
|
||||
bannerCta: "Настроить",
|
||||
ready: "Подключено · MLS",
|
||||
errorPrefix: "Не удалось связаться с координатором",
|
||||
interactiveHint: "Ваш подписант запрашивает подтверждение для каждого действия — используйте «Обновить» и «Отправить» по необходимости.",
|
||||
},
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,12 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
/**
|
||||
* ru translations — composed from fragments. Partial: missing keys fall
|
||||
* back to English; `check-i18n.mjs` reports coverage.
|
||||
*/
|
||||
const ru = {
|
||||
const ru = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -20,6 +19,8 @@ const ru = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default ru;
|
||||
|
|
|
|||
323
src/i18n/sv/drift.ts
Normal file
323
src/i18n/sv/drift.ts
Normal file
|
|
@ -0,0 +1,323 @@
|
|||
/**
|
||||
* sv — translation drift fragment.
|
||||
*
|
||||
* The keys added to `en` after the original batch pass. Kept in their own
|
||||
* module so this pass never touches the batch files. Composed into `sv` in
|
||||
* `index.ts` via a deep merge (a shallow spread would clobber the sibling
|
||||
* keys already present in the batches, e.g. `socialUi`, `walletUi`).
|
||||
*/
|
||||
const drift = {
|
||||
nav: {
|
||||
searchLanguages: "Sök språk...",
|
||||
noLanguages: "Inga språk hittades",
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: "Platser",
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: "Kom igång",
|
||||
firstRunAddSpot: "Lägg till din första spot",
|
||||
firstRunJoinCrew: "Gå med i ett crew",
|
||||
firstRunStartCrew: "Starta ditt crew",
|
||||
firstRunWallet: "Ställ in din plånbok",
|
||||
forecastDays: "{{count}}-dagarsprognos",
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: "{{count}}-dagarsprognos",
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: "återkallad",
|
||||
stateVerifying: "verifierar",
|
||||
},
|
||||
loadFailed: "Kunde inte nå reläerna. Kontrollera din anslutning och försök igen.",
|
||||
statusPending: "väntar",
|
||||
offers: {
|
||||
closeDeal: "Stäng affär",
|
||||
loadFailed: "Kunde inte ladda erbjudanden. Kontrollera din anslutning och försök igen.",
|
||||
},
|
||||
pay: {
|
||||
nonSats: "Det här erbjudandet är prissatt i {{currency}}. Betalning i appen sker endast i sats. Gör upp direkt med säljaren.",
|
||||
unsupported: "Den här betalkoden (en Cashu-begäran) stöds inte än. Be säljaren om en Lightning-faktura eller adress.",
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: "Medlen är låsta i escrow och sparade på den här enheten, men begäran skickades inte. Öppna annonsen igen för att försöka på nytt. Betala inte igen.",
|
||||
mintLabel: "Mint (där medlen är låsta)",
|
||||
sellerMintHint: "Säljaren föredrar den här minten; medel som låses här är enklast för dem att lösa in.",
|
||||
mintHint: "Escrow finns hos den här minten. Säljaren löser in här, så välj en ni båda litar på.",
|
||||
noMints: "Inga mints tillgängliga",
|
||||
p2pkUnsupported: "Den här minten annonserar inte stöd för P2PK (NUT-11), så escrow kan inte låsas här. Välj en annan mint.",
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: "Erbjud kläder",
|
||||
tabClothing: "Kläder",
|
||||
empty: {
|
||||
clothingTitle: "Inga kläddesigners än",
|
||||
clothingBody: "Bli den första att erbjuda specialgjorda kläder, lagkit och kläder för scenen.",
|
||||
},
|
||||
craftFields: {
|
||||
sizing: "Storleksintervall",
|
||||
samples: "Prover / prototyper",
|
||||
customization: "Anpassning",
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: "SkateSpots-koordinator",
|
||||
ourDefaultDesc: "SkateSpots kör en koordinator på relay.skate-spots.org. Använd den som standard, eller kör din egen — en koordinator ser bara chiffertext och metadata, aldrig dina meddelanden.",
|
||||
useOurs: "Använd SkateSpots-koordinatorn",
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: "Krypterad chatt",
|
||||
privateChatName: "Privat chatt",
|
||||
privateChatDesc: "Gruppchatt med forward secrecy (MLS) via en koordinator.",
|
||||
privateChatDescFull: "Den privata chatten skapas en gång av en admin, sedan går medlemmar med.",
|
||||
chatRowDesc: "Alla i crewet — förseglat till varje medlems nyckel (NIP-17).",
|
||||
openChat: "Öppna",
|
||||
setUpChat: "Ställ in",
|
||||
joinChat: "Gå med",
|
||||
checking: "Kontrollerar…",
|
||||
openInAnotherApp: "Öppna i en annan app",
|
||||
openInCordnWeb: "Cordn (webb)",
|
||||
openCordnGroup: "Öppna crewchatten",
|
||||
copyForStaircase: "Kopiera för Staircase",
|
||||
},
|
||||
dms: {
|
||||
refresh: "Uppdatera",
|
||||
crews: "Crews",
|
||||
crewFounder: "Grundare",
|
||||
crewMember: "Medlem",
|
||||
crewOpen: "Öppna",
|
||||
crewSetUp: "Ställ in",
|
||||
},
|
||||
form: {
|
||||
cordnGroup: "Cordn-grupp",
|
||||
cordnGroupHint: "Valfritt: klistra in grupplänken från Staircase eller Cordn webb. Ditt crew får då riktig end-to-end MLS-chatt, hostad på vår koordinator.",
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: "Förtroende",
|
||||
trustSub: "Källor och visning",
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: "Tysta",
|
||||
muted: "Tystad",
|
||||
mutedDesc: "Du kommer inte se deras innehåll.",
|
||||
muteFailed: "Kunde inte tysta. Försök igen.",
|
||||
loginToMute: "Logga in för att tysta.",
|
||||
attributedNetwork: "Från personer i ditt nätverk",
|
||||
attributedProviderHouse: "Från community-leverantören för förtroende",
|
||||
attributedProviderCustom: "Från leverantören du valde",
|
||||
howItWorks: "Så fungerar förtroende",
|
||||
flaggedNoticeTitle: "Rapporterad av betrodda skatare",
|
||||
flaggedNoticeDesc: "Var försiktig. Betrodda personer i nätverket har rapporterat det här kontot.",
|
||||
flaggedReporterFollow: "{{count}} som du följer",
|
||||
flaggedReporterNetwork: "{{count}} i ditt nätverk",
|
||||
flaggedReporterOther: "{{count}} andra konton",
|
||||
flaggedReport: "Rapportera",
|
||||
flaggedDismiss: "Avfärda",
|
||||
bucketVerified: "Verifierad",
|
||||
bucketUnknown: "Okänd",
|
||||
bucketFlagged: "Flaggad",
|
||||
bucketVerifiedDesc: "Någon i ditt nätverk går i god för det här kontot.",
|
||||
bucketUnknownDesc: "Ingen i ditt nätverk har gått i god för det här kontot än.",
|
||||
bucketFlaggedDesc: "Betrodda personer rapporterade det här kontot.",
|
||||
reportedByTrusted: "Rapporterad av {{count}} betrodda personer",
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: "Nätverksaviseringar",
|
||||
alertsDesc: "Konton du följer som betrodda personer har rapporterat eller tystat.",
|
||||
alertsEmpty: "Inga aviseringar. Vi kontrollerar kontona du följer för rapporter från betrodda personer.",
|
||||
alertsReported: "Rapporterad av {{count}} betrodda personer",
|
||||
alertsMuted: "Tystad av {{count}} betrodda personer",
|
||||
alertsIgnore: "Ignorera",
|
||||
alertsUnfollow: "Sluta följa",
|
||||
alertsLogin: "Logga in för att se aviseringar för kontona du följer.",
|
||||
providerTitle: "Leverantör",
|
||||
providerDesc: "Poäng kommer från en leverantör du väljer. Community-leverantören är standard.",
|
||||
useCommunity: "Använd community-leverantören",
|
||||
setProvider: "Ange en leverantör",
|
||||
customPubkeyPlaceholder: "Leverantörens npub eller hex-pubnyckel",
|
||||
customRelayPlaceholder: "wss://relay.example.com",
|
||||
invalidProvider: "Ange en giltig npub eller 64-teckens hex-pubnyckel, och ett wss://-relä.",
|
||||
publishFailed: "Kunde inte publicera leverantören. Försök igen.",
|
||||
providerSaved: "Leverantören uppdaterad.",
|
||||
loggedOutProvider: "Logga in för att välja en leverantör.",
|
||||
showMarks: "Visa förtroendemärken",
|
||||
showMarksDesc: "Verifierade och okända märken. Rapporter visas alltid.",
|
||||
sourceLabel: "Källa",
|
||||
sourceHouse: "Community-leverantör för förtroende",
|
||||
sourceCustom: "Din leverantör",
|
||||
loggedOut: "Logga in för att välja din egen leverantör för förtroende.",
|
||||
seoTitle: "Så fungerar förtroende",
|
||||
seoDescription: "Hur SkateSpots visar förtroende: tre tillstånd, var poängen kommer från, och varför frånvaro inte är misstro.",
|
||||
title: "Så fungerar förtroende",
|
||||
intro: "Förtroende här är en signal, inte en dom. Det kommer från dem du känner, eller från en leverantör du väljer. Vi rangordnar inte människor globalt.",
|
||||
statesTitle: "Tre tillstånd",
|
||||
verifiedTitle: "Verifierad",
|
||||
verifiedDesc: "Någon i ditt nätverk går i god för det här kontot: en vän till en vän, eller din valda leverantör.",
|
||||
unknownTitle: "Okänd",
|
||||
unknownDesc: "Ingen har gått i god än. Det är här varje nytt konto börjar.",
|
||||
flaggedTitle: "Flaggad",
|
||||
flaggedDesc: "Betrodda personer rapporterade det här kontot. Det är en varning att titta närmare, inte ett bevis på något.",
|
||||
absenceTitle: "Inget märke är inte misstro",
|
||||
absenceDesc: "De flesta konton visar ingenting alls. Det betyder att ingen i ditt nätverk har gått i god för dem än, inte att något är fel. Läs aldrig ett saknat märke som något negativt.",
|
||||
sourceTitle: "Vem beräknar det",
|
||||
sourceDesc: "Som standard använder vi ditt eget nätverk. Du kan också välja en leverantör för förtroende som publicerar signerade poäng över Nostr (NIP-85), eller stänga av visningen. Flaggad visas alltid, eftersom det är en säkerhetssignal.",
|
||||
endorsementTitle: "Närvaro är inte rekommendation",
|
||||
endorsementDesc: "Ett verifierat märke betyder att någon gick i god, inte att personen är bra. En flagga betyder att betrodda personer rapporterade dem, inte att de är skyldiga. Kontrollera detaljerna innan du bestämmer.",
|
||||
povTitle: "Det beror på synvinkeln",
|
||||
povDesc: "En poäng är relativ till vem som tittar. En rangordning från en leverantör eller en person är inte jämförbar med en annan, och vi presenterar aldrig en som ett objektivt faktum.",
|
||||
settingsCta: "Hantera i Inställningar",
|
||||
},
|
||||
marketTerms: {
|
||||
link: "Riktlinjer för marknadsplatsen",
|
||||
seoTitle: "Riktlinjer för marknadsplatsen",
|
||||
seoDescription: "Hur SkateSpots-annonser för utrustning fungerar: peer-to-peer, köpare var uppmärksam, och reglerna.",
|
||||
title: "Riktlinjer för marknadsplatsen",
|
||||
intro: "SkateSpots är en peer-to-peer-tavla för utrustning. Du gör upp direkt med den andra personen: vi håller inga medel, skickar inga varor och löser inga tvister.",
|
||||
howTitle: "Så fungerar det",
|
||||
howBody: "Lägg upp utrustning, kontakta säljaren i ett privat meddelande och gör upp direkt (kontanter, Lightning eller ett byte). Det finns ingen varukorg eller kassa.",
|
||||
rulesTitle: "Vad som inte är tillåtet",
|
||||
rulesBody: "Inget olagligt, farligt eller vuxet innehåll; inga droger, vapen, förfalskade eller stulna varor. Håll annonserna kring skateutrustning och relaterade saker.",
|
||||
respectTitle: "Var respektfull",
|
||||
respectBody: "Inga övergrepp, trakasserier, hot eller hat. Moderatorer kan dölja annonser eller konton.",
|
||||
trustTitle: "Förtroende är en vägledning, inte en garanti",
|
||||
trustBody: "Verifieringsmärken och handelsrykte är signaler från nätverket, inte löften. Gör dina egna kontroller innan du handlar.",
|
||||
trustLink: "Så fungerar förtroende",
|
||||
privacyLink: "Vad som lämnar din enhet",
|
||||
safetyTitle: "Handla säkert",
|
||||
safetyBody: "Mötas offentligt för överlämningar, använd escrow eller en handpenning i god tro för skickade affärer, och skicka aldrig pengar utanför appen.",
|
||||
moderationTitle: "Moderering är mjuk och återställbar",
|
||||
moderationBody: "Dolt innehåll ligger kvar på reläer och kan återställas; tvister mellan personer är ditt att lösa.",
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: "T-Shirts",
|
||||
hoodies: "Hoodies & Sweats",
|
||||
pants: "Byxor & Shorts",
|
||||
jackets: "Jackor & Ytterkläder",
|
||||
kits: "Lagkit & Jerseys",
|
||||
caps: "Kepsar & Mössor",
|
||||
socks: "Strumpor",
|
||||
accessories: "Väskor & Accessoarer",
|
||||
footwear: "Skor & Fotbeklädnad",
|
||||
patches: "Patches & Applikationer",
|
||||
griptape: "Griptape & Brädkäder",
|
||||
onepiece: "Unika plagg / Upcycled",
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: "Specialgjorda t-shirts och toppar",
|
||||
hoodies: "Hoodies, sweatshirts och mjukisbyxor",
|
||||
pants: "Arbetsbyxor, cargobyxor och shorts",
|
||||
jackets: "Coachjackor, skaljackor och arbetsjackor",
|
||||
kits: "Lagkit, jerseys och uniformer",
|
||||
caps: "Kepsar, mössor och huvudbonader",
|
||||
socks: "Crewstrumpor och stickat",
|
||||
accessories: "Väskor, bälten och småsaker",
|
||||
footwear: "Specialgjorda skor och fotbeklädnad",
|
||||
patches: "Broderade patches och applikationer",
|
||||
griptape: "Griptape-konst och brädkäder",
|
||||
onepiece: "Enstaka plagg och upcyclade plagg",
|
||||
},
|
||||
method: {
|
||||
screenprint: "Screentryck",
|
||||
dtg: "DTG / Direct-to-Garment",
|
||||
embroidery: "Broderi",
|
||||
cutsew: "Cut & Sew",
|
||||
sublimation: "Sublimering",
|
||||
heattransfer: "Värmetransfer / Vinyl",
|
||||
garmentdye: "Plaggfärgning",
|
||||
knit: "Stickat",
|
||||
patchwork: "Patchwork",
|
||||
allover: "Tryck över hela plagget",
|
||||
},
|
||||
material: {
|
||||
cotton: "Bomull",
|
||||
heavyweight: "Tungt tyg",
|
||||
organic: "Ekologisk / Hållbar",
|
||||
fleece: "Fleece",
|
||||
denim: "Denim",
|
||||
canvas: "Canvas",
|
||||
nylon: "Nylon / Teknisk",
|
||||
wool: "Merino / Ull",
|
||||
leather: "Läder",
|
||||
recycled: "Återvunnen / Deadstock",
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: "Bli kläddesigner - SkateSpots",
|
||||
seoDescription: "Specialgjorda kläder, lagkit och plagg för scenen.",
|
||||
heading: "Kläddesigner",
|
||||
tagline: "Specialgjorda kläder, lagkit och plagg för scenen",
|
||||
noun: "kläddesigner",
|
||||
rateLabel: "Pris",
|
||||
portfolioLabel: "Butiks- / portföljlänk",
|
||||
sectionWhatYouMake: "Vad du gör",
|
||||
sectionHowYouMake: "Hur du gör det",
|
||||
sectionMaterials: "Material",
|
||||
minimumPlaceholder: "t.ex. 10 plagg",
|
||||
turnaroundPlaceholder: "t.ex. 2-3 veckor",
|
||||
sizingPlaceholder: "t.ex. XS-3XL / måttsytt",
|
||||
samplesHelper: "Erbjuder du prover eller prototyper innan en full produktion?",
|
||||
customizationPlaceholder: "t.ex. namn, nummer, grafik",
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: "Uppdaterad",
|
||||
refresh: "Uppdatera",
|
||||
unavailable: "Väder ej tillgängligt.",
|
||||
retry: "Försök igen",
|
||||
sunrise: "Soluppgång",
|
||||
sunset: "Solnedgång",
|
||||
legendTitle: "Väderpoäng",
|
||||
legendWeatherOnly: "Endast väder",
|
||||
},
|
||||
cordnUi: {
|
||||
title: "Privat chatt",
|
||||
subtitle: "End-to-end-krypterad (MLS) mellan crewmedlemmar. Koordinatorn dirigerar bara chiffertext och metadata — den ser aldrig meddelandeinnehåll.",
|
||||
notLoggedIn: "Logga in för att använda crewets privata chatt.",
|
||||
membersOnly: "Endast crewmedlemmar kan öppna den privata chatten.",
|
||||
connecting: "Ansluter…",
|
||||
noCoordinator: "Ingen koordinator är konfigurerad för det här crewet än.",
|
||||
noGroupAdmin: "Det här crewets privata chatt har inte skapats än.",
|
||||
noGroupMember: "Du är inte med i det här crewets privata chatt än.",
|
||||
create: "Skapa den privata chatten",
|
||||
requestJoin: "Be om att gå med",
|
||||
checkInvite: "Kontrollera inbjudan",
|
||||
requested: "Begäran skickad — en crewadmin godkänner den.",
|
||||
noInvite: "Ingen inbjudan väntar än. Be en admin godkänna din begäran.",
|
||||
placeholder: "Meddela crewet…",
|
||||
send: "Skicka",
|
||||
refresh: "Uppdatera",
|
||||
requests: "Medlemsbegäranden",
|
||||
checkRequests: "Kontrollera begäranden",
|
||||
approve: "Lägg till",
|
||||
noRequests: "Inga väntande medlemsbegäranden.",
|
||||
inviteHint: "Bara du är i den här chatten än så länge — crewmedlemmar kan trycka på ”Be om att gå med”, sedan godkänner du dem här.",
|
||||
memberCount: "{{count}} i gruppen",
|
||||
you: "Du",
|
||||
groupRef: "Grupplänk",
|
||||
copyRef: "Kopiera",
|
||||
copied: "Kopierad",
|
||||
attachImage: "Bifoga bild",
|
||||
uploading: "Laddar upp…",
|
||||
uploadFailed: "Kunde inte ladda upp bilden.",
|
||||
bannerTitle: "Det här crewet har ingen privat chatt än",
|
||||
bannerBody: "Ställ in end-to-end-krypterad (MLS) chatt för ditt crew — medlemmar går med från fliken.",
|
||||
bannerCta: "Ställ in",
|
||||
ready: "Ansluten · MLS",
|
||||
errorPrefix: "Kunde inte nå koordinatorn",
|
||||
interactiveHint: "Din signerare begär godkännande för varje åtgärd — använd Uppdatera och Skicka vid behov.",
|
||||
},
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,8 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
const sv = {
|
||||
const sv = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -16,6 +19,8 @@ const sv = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default sv;
|
||||
|
|
|
|||
315
src/i18n/th/drift.ts
Normal file
315
src/i18n/th/drift.ts
Normal file
|
|
@ -0,0 +1,315 @@
|
|||
const driftStrings = {
|
||||
nav: {
|
||||
searchLanguages: 'ค้นหาภาษา...',
|
||||
noLanguages: 'ไม่พบภาษา',
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: 'สถานที่',
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: 'เริ่มต้น',
|
||||
firstRunAddSpot: 'เพิ่ม spot แรกของคุณ',
|
||||
firstRunJoinCrew: 'เข้าร่วม crew',
|
||||
firstRunStartCrew: 'เริ่ม crew ของคุณ',
|
||||
firstRunWallet: 'ตั้งกระเป๋าเงินของคุณ',
|
||||
forecastDays: 'พยากรณ์ {{count}} วัน',
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: 'พยากรณ์ {{count}} วัน',
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: 'ถูกเพิกถอน',
|
||||
stateVerifying: 'กำลังตรวจสอบ',
|
||||
},
|
||||
loadFailed: 'เชื่อมต่อ relay ไม่ได้ ตรวจสอบการเชื่อมต่อแล้วลองอีกครั้ง',
|
||||
statusPending: 'รอดำเนินการ',
|
||||
offers: {
|
||||
closeDeal: 'ปิดดีล',
|
||||
loadFailed: 'โหลดข้อเสนอไม่สำเร็จ ตรวจสอบการเชื่อมต่อแล้วลองอีกครั้ง',
|
||||
},
|
||||
pay: {
|
||||
nonSats: 'ข้อเสนอนี้ตั้งราคาเป็น {{currency}} การชำระในแอปใช้ sats เท่านั้น กรุณาตกลงกับผู้ขายโดยตรง',
|
||||
unsupported: 'รหัสชำระเงินนี้ (คำขอ Cashu) ยังไม่รองรับ ขอใบแจ้งหนี้ Lightning หรือที่อยู่จากผู้ขาย',
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: 'เงินถูกล็อกใน escrow และบันทึกไว้ในอุปกรณ์นี้ แต่คำขอไม่ได้ถูกส่ง เปิดประกาศอีกครั้งเพื่อลองใหม่ อย่าจ่ายซ้ำ',
|
||||
mintLabel: 'Mint (ที่ล็อกเงินไว้)',
|
||||
sellerMintHint: 'ผู้ขายชอบ mint นี้ เงินที่ล็อกไว้ที่นี่เป็นสิ่งที่พวกเขาแลกได้ง่ายที่สุด',
|
||||
mintHint: 'Escrow อยู่ที่ mint นี้ ผู้ขายแลกที่นี่ ดังนั้นเลือกอันที่คุณทั้งคู่ไว้ใจ',
|
||||
noMints: 'ไม่มี mint ที่ใช้ได้',
|
||||
p2pkUnsupported: 'mint นี้ไม่ประกาศรองรับ P2PK (NUT-11) จึงล็อก escrow ที่นี่ไม่ได้ เลือก mint อื่น',
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: 'เสนอเสื้อผ้า',
|
||||
tabClothing: 'เสื้อผ้า',
|
||||
empty: {
|
||||
clothingTitle: 'ยังไม่มีดีไซเนอร์เสื้อผ้า',
|
||||
clothingBody: 'เป็นคนแรกที่เสนอเสื้อผ้าคัสตอม ชุดทีม และแอปพาเรลให้ซีน',
|
||||
},
|
||||
craftFields: {
|
||||
sizing: 'ช่วงไซซ์',
|
||||
samples: 'ตัวอย่าง / ต้นแบบ',
|
||||
customization: 'การปรับแต่ง',
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: 'Coordinator ของ SkateSpots',
|
||||
ourDefaultDesc: 'SkateSpots รัน coordinator ที่ relay.skate-spots.org ใช้เป็นค่าเริ่มต้น หรือรันของคุณเอง — coordinator เห็นเพียงข้อความเข้ารหัสและ metadata ไม่เคยเห็นข้อความของคุณ',
|
||||
useOurs: 'ใช้ coordinator ของ SkateSpots',
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: 'แชทเข้ารหัส',
|
||||
privateChatName: 'แชทส่วนตัว',
|
||||
privateChatDesc: 'แชทกลุ่มแบบ forward-secret (MLS) ผ่าน coordinator',
|
||||
privateChatDescFull: 'แชทส่วนตัวถูกสร้างครั้งเดียวโดยแอดมิน จากนั้นสมาชิกจึงเข้าร่วม',
|
||||
chatRowDesc: 'ทุกคนใน crew — ถูกผนึกด้วยกุญแจของสมาชิกแต่ละคน (NIP-17)',
|
||||
openChat: 'เปิด',
|
||||
setUpChat: 'ตั้งค่า',
|
||||
joinChat: 'เข้าร่วม',
|
||||
checking: 'กำลังตรวจสอบ…',
|
||||
openInAnotherApp: 'เปิดในแอปอื่น',
|
||||
openInCordnWeb: 'Cordn (เว็บ)',
|
||||
openCordnGroup: 'เปิดแชท crew',
|
||||
copyForStaircase: 'คัดลอกสำหรับ Staircase',
|
||||
},
|
||||
dms: {
|
||||
refresh: 'รีเฟรช',
|
||||
crews: 'Crews',
|
||||
crewFounder: 'ผู้ก่อตั้ง',
|
||||
crewMember: 'สมาชิก',
|
||||
crewOpen: 'เปิด',
|
||||
crewSetUp: 'ตั้งค่า',
|
||||
},
|
||||
form: {
|
||||
cordnGroup: 'กลุ่ม Cordn',
|
||||
cordnGroupHint: 'ไม่บังคับ: วางลิงก์กลุ่มจาก Staircase หรือ Cordn เว็บ crew ของคุณจะได้แชท MLS เข้ารหัสต้นทาง-ปลายทางจริง โฮสต์บน coordinator ของเรา',
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: 'ความน่าเชื่อถือ',
|
||||
trustSub: 'แหล่งที่มาและการแสดงผล',
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: 'ปิดเสียง',
|
||||
muted: 'ปิดเสียงแล้ว',
|
||||
mutedDesc: 'คุณจะไม่เห็นเนื้อหาของพวกเขา',
|
||||
muteFailed: 'ปิดเสียงไม่สำเร็จ ลองอีกครั้ง',
|
||||
loginToMute: 'เข้าสู่ระบบเพื่อปิดเสียง',
|
||||
attributedNetwork: 'จากคนในเครือข่ายของคุณ',
|
||||
attributedProviderHouse: 'จากผู้ให้บริการความน่าเชื่อถือของชุมชน',
|
||||
attributedProviderCustom: 'จากผู้ให้บริการที่คุณเลือก',
|
||||
howItWorks: 'ความน่าเชื่อถือทำงานอย่างไร',
|
||||
flaggedNoticeTitle: 'ถูกรายงานโดยนักสเก็ตที่เชื่อถือได้',
|
||||
flaggedNoticeDesc: 'ระวัง คนที่เชื่อถือได้ในเครือข่ายรายงานบัญชีนี้',
|
||||
flaggedReporterFollow: '{{count}} คนที่คุณติดตาม',
|
||||
flaggedReporterNetwork: '{{count}} คนในเครือข่ายของคุณ',
|
||||
flaggedReporterOther: '{{count}} บัญชีอื่น',
|
||||
flaggedReport: 'รายงาน',
|
||||
flaggedDismiss: 'ปิด',
|
||||
bucketVerified: 'ยืนยันแล้ว',
|
||||
bucketUnknown: 'ไม่ทราบ',
|
||||
bucketFlagged: 'ถูกตั้งค่าสถานะ',
|
||||
bucketVerifiedDesc: 'มีคนในเครือข่ายของคุณรับรองบัญชีนี้',
|
||||
bucketUnknownDesc: 'ยังไม่มีใครในเครือข่ายของคุณรับรองบัญชีนี้',
|
||||
bucketFlaggedDesc: 'คนที่เชื่อถือได้รายงานบัญชีนี้',
|
||||
reportedByTrusted: 'ถูกรายงานโดยคนที่เชื่อถือได้ {{count}} คน',
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: 'การแจ้งเตือนเครือข่าย',
|
||||
alertsDesc: 'บัญชีที่คุณติดตามซึ่งคนที่เชื่อถือได้รายงานหรือปิดเสียง',
|
||||
alertsEmpty: 'ไม่มีการแจ้งเตือน เราตรวจสอบบัญชีที่คุณติดตามเพื่อหารายงานที่เชื่อถือได้',
|
||||
alertsReported: 'ถูกรายงานโดยคนที่เชื่อถือได้ {{count}} คน',
|
||||
alertsMuted: 'ถูกปิดเสียงโดยคนที่เชื่อถือได้ {{count}} คน',
|
||||
alertsIgnore: 'ไม่สนใจ',
|
||||
alertsUnfollow: 'เลิกติดตาม',
|
||||
alertsLogin: 'เข้าสู่ระบบเพื่อดูการแจ้งเตือนสำหรับบัญชีที่คุณติดตาม',
|
||||
providerTitle: 'ผู้ให้บริการ',
|
||||
providerDesc: 'คะแนนมาจากผู้ให้บริการที่คุณเลือก ผู้ให้บริการของชุมชนเป็นค่าเริ่มต้น',
|
||||
useCommunity: 'ใช้ผู้ให้บริการของชุมชน',
|
||||
setProvider: 'ตั้งผู้ให้บริการ',
|
||||
customPubkeyPlaceholder: 'npub หรือ hex pubkey ของผู้ให้บริการ',
|
||||
customRelayPlaceholder: 'wss://relay.example.com',
|
||||
invalidProvider: 'กรอก npub ที่ถูกต้องหรือ hex pubkey 64 ตัวอักษร และ Relay แบบ wss://',
|
||||
publishFailed: 'เผยแพร่ผู้ให้บริการไม่สำเร็จ ลองอีกครั้ง',
|
||||
providerSaved: 'อัปเดตผู้ให้บริการแล้ว',
|
||||
loggedOutProvider: 'เข้าสู่ระบบเพื่อเลือกผู้ให้บริการ',
|
||||
showMarks: 'แสดงเครื่องหมายความน่าเชื่อถือ',
|
||||
showMarksDesc: 'เครื่องหมายยืนยันและไม่ทราบ รายงานจะแสดงเสมอ',
|
||||
sourceLabel: 'แหล่งที่มา',
|
||||
sourceHouse: 'ผู้ให้บริการความน่าเชื่อถือของชุมชน',
|
||||
sourceCustom: 'ผู้ให้บริการของคุณ',
|
||||
loggedOut: 'เข้าสู่ระบบเพื่อเลือกผู้ให้บริการความน่าเชื่อถือของคุณเอง',
|
||||
seoTitle: 'ความน่าเชื่อถือทำงานอย่างไร',
|
||||
seoDescription: 'SkateSpots แสดงความน่าเชื่อถืออย่างไร: สามสถานะ คะแนนมาจากไหน และทำไมการไม่มีจึงไม่ใช่การไม่ไว้ใจ',
|
||||
title: 'ความน่าเชื่อถือทำงานอย่างไร',
|
||||
intro: 'ความน่าเชื่อถือที่นี่เป็นสัญญาณ ไม่ใช่คำตัดสิน มันมาจากคนที่คุณรู้จัก หรือจากผู้ให้บริการที่คุณเลือก เราไม่ได้จัดอันดับผู้คนทั่วโลก',
|
||||
statesTitle: 'สามสถานะ',
|
||||
verifiedTitle: 'ยืนยันแล้ว',
|
||||
verifiedDesc: 'มีคนในเครือข่ายของคุณรับรองบัญชีนี้: เพื่อนของเพื่อน หรือผู้ให้บริการที่คุณเลือก',
|
||||
unknownTitle: 'ไม่ทราบ',
|
||||
unknownDesc: 'ยังไม่มีใครรับรอง ทุกบัญชีใหม่เริ่มต้นที่นี่',
|
||||
flaggedTitle: 'ถูกตั้งค่าสถานะ',
|
||||
flaggedDesc: 'คนที่เชื่อถือได้รายงานบัญชีนี้ เป็นคำเตือนให้ดูใกล้ขึ้น ไม่ใช่หลักฐานของสิ่งใด',
|
||||
absenceTitle: 'ไม่มีตราไม่ได้แปลว่าไม่ไว้ใจ',
|
||||
absenceDesc: 'บัญชีส่วนใหญ่ไม่แสดงอะไรเลย นั่นหมายความว่ายังไม่มีใครในเครือข่ายของคุณรับรองพวกเขา ไม่ใช่มีอะไรผิดปกติ อย่าตีความเครื่องหมายที่หายไปเป็นแง่ลบ',
|
||||
sourceTitle: 'ใครคำนวณ',
|
||||
sourceDesc: 'โดยค่าเริ่มต้นเราใช้เครือข่ายของคุณเอง คุณยังเลือกผู้ให้บริการความน่าเชื่อถือที่เผยแพร่คะแนนแบบลงนามผ่าน Nostr (NIP-85) หรือปิดการแสดงผลได้ ถูกตั้งค่าสถานะจะแสดงเสมอ เพราะเป็นสัญญาณความปลอดภัย',
|
||||
endorsementTitle: 'การปรากฏตัวไม่ใช่การรับรอง',
|
||||
endorsementDesc: 'เครื่องหมายยืนยันหมายความว่ามีคนรับรอง ไม่ใช่ว่าคนนั้นดี เครื่องหมายหมายความว่าคนที่เชื่อถือได้รายงานพวกเขา ไม่ใช่ว่าพวกเขาผิด ตรวจสอบรายละเอียดก่อนตัดสินใจ',
|
||||
povTitle: 'ขึ้นอยู่กับมุมมอง',
|
||||
povDesc: 'คะแนนขึ้นอยู่กับว่าใครเป็นคนมอง อันดับจากผู้ให้บริการหนึ่งหรือคนหนึ่งเทียบกับอีกอันไม่ได้ และเราไม่เคยนำเสนอเป็นข้อเท็จจริงที่เป็นกลาง',
|
||||
settingsCta: 'จัดการในการตั้งค่า',
|
||||
},
|
||||
marketTerms: {
|
||||
link: 'แนวทางมาร์เก็ตเพลส',
|
||||
seoTitle: 'แนวทางมาร์เก็ตเพลส',
|
||||
seoDescription: 'ประกาศอุปกรณ์ SkateSpots ทำงานอย่างไร: แบบเพียร์ทูเพียร์ ผู้ซื้อระวังตัว และกฎต่าง ๆ',
|
||||
title: 'แนวทางมาร์เก็ตเพลส',
|
||||
intro: 'SkateSpots เป็นกระดานอุปกรณ์แบบเพียร์ทูเพียร์ คุณตกลงกับอีกฝ่ายโดยตรง: เราไม่ถือเงิน ไม่ส่งของ และไม่ระงับข้อพิพาท',
|
||||
howTitle: 'ทำงานอย่างไร',
|
||||
howBody: 'ลงประกาศอุปกรณ์ ติดต่อผู้ขายทางข้อความส่วนตัว และตกลงกันโดยตรง (เงินสด Lightning หรือแลกเปลี่ยน) ไม่มีตะกร้าหรือขั้นตอนชำระเงิน',
|
||||
rulesTitle: 'สิ่งที่ไม่ได้รับอนุญาต',
|
||||
rulesBody: 'ห้ามเนื้อหาผิดกฎหมาย อันตราย หรือสำหรับผู้ใหญ่ ห้ามยาเสพติด อาวุธ ของปลอมหรือของที่ถูกขโมย เก็บประกาศให้เกี่ยวกับอุปกรณ์สเก็ตและของที่เกี่ยวข้อง',
|
||||
respectTitle: 'มีน้ำใจต่อกัน',
|
||||
respectBody: 'ห้ามการล่วงละเมิด คุกคาม ข่มขู่ หรือความเกลียดชัง ผู้ดูแลสามารถซ่อนประกาศหรือบัญชีได้',
|
||||
trustTitle: 'ความน่าเชื่อถือเป็นแนวทาง ไม่ใช่การรับประกัน',
|
||||
trustBody: 'เครื่องหมายยืนยันและชื่อเสียงการค้าเป็นสัญญาณจากเครือข่าย ไม่ใช่คำสัญญา ตรวจสอบด้วยตัวเองก่อนซื้อขาย',
|
||||
trustLink: 'ความน่าเชื่อถือทำงานอย่างไร',
|
||||
privacyLink: 'อะไรออกจากอุปกรณ์ของคุณ',
|
||||
safetyTitle: 'ซื้อขายอย่างปลอดภัย',
|
||||
safetyBody: 'นัดเจอกันในที่สาธารณะสำหรับการส่งมอบ ใช้ escrow หรือเงินมัดจำด้วยความจริงใจสำหรับดีลที่ส่งของ และอย่าโอนเงินนอกแอปเด็ดขาด',
|
||||
moderationTitle: 'การดูแลนุ่มนวลและย้อนกลับได้',
|
||||
moderationBody: 'เนื้อหาที่ถูกซ่อนยังอยู่บน relay และกู้คืนได้ ข้อพิพาทระหว่างผู้คนเป็นเรื่องที่คุณต้องจัดการเอง',
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: 'เสื้อยืด',
|
||||
hoodies: 'ฮู้ดดี้ & เสื้อสเวต',
|
||||
pants: 'กางเกงขายาว & กางเกงขาสั้น',
|
||||
jackets: 'แจ็คเก็ต & เสื้อคลุม',
|
||||
kits: 'ชุดทีม & เจอร์ซีย์',
|
||||
caps: 'หมวกแก๊ป & หมวกไหมพรม',
|
||||
socks: 'ถุงเท้า',
|
||||
accessories: 'กระเป๋า & เครื่องประดับ',
|
||||
footwear: 'รองเท้า',
|
||||
patches: 'อาร์มปะ & งานปะติด',
|
||||
griptape: 'งานศิลป์ Griptape & เสื้อผ้า Deck',
|
||||
onepiece: 'ชิ้นเดียว / อัปไซเคิล',
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: 'เสื้อยืดและเสื้อตัวบนคัสตอม',
|
||||
hoodies: 'ฮู้ดดี้ เสื้อสเวต และกางเกงสเวต',
|
||||
pants: 'กางเกงทำงาน กางเกงคาร์โก้ และกางเกงขาสั้น',
|
||||
jackets: 'เสื้อโค้ช เสื้อเชลล์ และแจ็คเก็ตทำงาน',
|
||||
kits: 'ชุดทีม เจอร์ซีย์ และเครื่องแบบ',
|
||||
caps: 'หมวกแก๊ป หมวกไหมพรม และหมวกคลุมศีรษะ',
|
||||
socks: 'ถุงเท้า crew และงานถัก',
|
||||
accessories: 'กระเป๋า เข็มขัด และของชิ้นเล็ก',
|
||||
footwear: 'รองเท้าคัสตอมและรองเท้าต่าง ๆ',
|
||||
patches: 'อาร์มปักและงานปะติด',
|
||||
griptape: 'งานศิลป์ Griptape และเสื้อผ้า Deck',
|
||||
onepiece: 'ชิ้นเดี่ยวและเสื้อผ้าอัปไซเคิล',
|
||||
},
|
||||
method: {
|
||||
screenprint: 'สกรีน',
|
||||
dtg: 'DTG / พิมพ์ลงผ้าโดยตรง',
|
||||
embroidery: 'งานปัก',
|
||||
cutsew: 'ตัด & เย็บ',
|
||||
sublimation: 'พิมพ์ซับลิเมชัน',
|
||||
heattransfer: 'ถ่ายโอนความร้อน / ไวนิล',
|
||||
garmentdye: 'ย้อมสำเร็จรูป',
|
||||
knit: 'งานถัก',
|
||||
patchwork: 'งานปะติด',
|
||||
allover: 'พิมพ์ทั้งตัว',
|
||||
},
|
||||
material: {
|
||||
cotton: 'คอตตอน',
|
||||
heavyweight: 'ผ้าหนัก',
|
||||
organic: 'ออร์แกนิก / ยั่งยืน',
|
||||
fleece: 'ผ้าฟลีซ',
|
||||
denim: 'เดนิม',
|
||||
canvas: 'ผ้าแคนวาส',
|
||||
nylon: 'ไนลอน / เทคนิคอล',
|
||||
wool: 'เมอริโน / ขนสัตว์',
|
||||
leather: 'หนัง',
|
||||
recycled: 'รีไซเคิล / Deadstock',
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: 'เป็นดีไซเนอร์เสื้อผ้า - SkateSpots',
|
||||
seoDescription: 'เสื้อผ้าคัสตอม ชุดทีม & แอปพาเรลสำหรับซีน',
|
||||
heading: 'ดีไซเนอร์เสื้อผ้า',
|
||||
tagline: 'เสื้อผ้าคัสตอม ชุดทีม & แอปพาเรลสำหรับซีน',
|
||||
noun: 'ดีไซเนอร์เสื้อผ้า',
|
||||
rateLabel: 'ราคา',
|
||||
portfolioLabel: 'ลิงก์ร้านค้า / พอร์ตโฟลิโอ',
|
||||
sectionWhatYouMake: 'สิ่งที่คุณทำ',
|
||||
sectionHowYouMake: 'คุณทำอย่างไร',
|
||||
sectionMaterials: 'วัสดุ',
|
||||
minimumPlaceholder: 'เช่น 10 ชิ้น',
|
||||
turnaroundPlaceholder: 'เช่น 2-3 สัปดาห์',
|
||||
sizingPlaceholder: 'เช่น XS-3XL / ตัดตามสั่ง',
|
||||
samplesHelper: 'คุณมีตัวอย่างหรือต้นแบบก่อนผลิตเต็มจำนวนไหม?',
|
||||
customizationPlaceholder: 'เช่น ชื่อ หมายเลข กราฟิก',
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: 'อัปเดตแล้ว',
|
||||
refresh: 'รีเฟรช',
|
||||
unavailable: 'สภาพอากาศไม่พร้อมใช้งาน',
|
||||
retry: 'ลองอีกครั้ง',
|
||||
sunrise: 'พระอาทิตย์ขึ้น',
|
||||
sunset: 'พระอาทิตย์ตก',
|
||||
legendTitle: 'คะแนนสภาพอากาศ',
|
||||
legendWeatherOnly: 'เฉพาะสภาพอากาศ',
|
||||
},
|
||||
cordnUi: {
|
||||
title: 'แชทส่วนตัว',
|
||||
subtitle: 'เข้ารหัสต้นทาง-ปลายทาง (MLS) ระหว่างสมาชิก crew coordinator เพียงส่งต่อข้อความเข้ารหัสและ metadata — ไม่เคยเห็นเนื้อหาข้อความ',
|
||||
notLoggedIn: 'เข้าสู่ระบบเพื่อใช้แชทส่วนตัวของ crew',
|
||||
membersOnly: 'เฉพาะสมาชิก crew เท่านั้นที่เปิดแชทส่วนตัวได้',
|
||||
connecting: 'กำลังเชื่อมต่อ…',
|
||||
noCoordinator: 'ยังไม่ได้ตั้งค่า coordinator สำหรับ crew นี้',
|
||||
noGroupAdmin: 'แชทส่วนตัวของ crew นี้ยังไม่ถูกสร้าง',
|
||||
noGroupMember: 'คุณยังไม่ได้อยู่ในแชทส่วนตัวของ crew นี้',
|
||||
create: 'สร้างแชทส่วนตัว',
|
||||
requestJoin: 'ขอเข้าร่วม',
|
||||
checkInvite: 'ตรวจสอบคำเชิญ',
|
||||
requested: 'ส่งคำขอแล้ว — แอดมิน crew จะอนุมัติ',
|
||||
noInvite: 'ยังไม่มีคำเชิญที่รออยู่ ขอให้แอดมินอนุมัติคำขอของคุณ',
|
||||
placeholder: 'ส่งข้อความถึง crew…',
|
||||
send: 'ส่ง',
|
||||
refresh: 'รีเฟรช',
|
||||
requests: 'คำขอเข้าร่วม',
|
||||
checkRequests: 'ตรวจสอบคำขอ',
|
||||
approve: 'เพิ่ม',
|
||||
noRequests: 'ไม่มีคำขอเข้าร่วมที่ค้างอยู่',
|
||||
inviteHint: 'ในแชทนี้มีแค่คุณเท่านั้น — สมาชิก crew สามารถแตะ “ขอเข้าร่วม” แล้วคุณอนุมัติที่นี่',
|
||||
memberCount: '{{count}} คนในกลุ่ม',
|
||||
you: 'คุณ',
|
||||
groupRef: 'ลิงก์กลุ่ม',
|
||||
copyRef: 'คัดลอก',
|
||||
copied: 'คัดลอกแล้ว',
|
||||
attachImage: 'แนบรูปภาพ',
|
||||
uploading: 'กำลังอัปโหลด…',
|
||||
uploadFailed: 'อัปโหลดรูปภาพไม่สำเร็จ',
|
||||
bannerTitle: 'crew นี้ยังไม่มีแชทส่วนตัว',
|
||||
bannerBody: 'ตั้งค่าแชทเข้ารหัสต้นทาง-ปลายทาง (MLS) สำหรับ crew ของคุณ — สมาชิกเข้าร่วมจากแท็บ',
|
||||
bannerCta: 'ตั้งค่า',
|
||||
ready: 'เชื่อมต่อแล้ว · MLS',
|
||||
errorPrefix: 'เชื่อมต่อ coordinator ไม่ได้',
|
||||
interactiveHint: 'ตัวลงนามของคุณขออนุมัติทุกครั้งที่ทำรายการ — ใช้รีเฟรชและส่งตามต้องการ',
|
||||
},
|
||||
};
|
||||
|
||||
export default driftStrings;
|
||||
|
|
@ -17,16 +17,11 @@ import batch16 from './batch16';
|
|||
import batch17 from './batch17';
|
||||
import batch18 from './batch18';
|
||||
import batch19 from './batch19';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
/**
|
||||
* Thai (ไทย) translations — composed from fragments so parallel translation
|
||||
* batches never touch one giant file (same pattern as `i18n/batch3|batch4`).
|
||||
*
|
||||
* Partial by design: any key not yet translated falls back to English, and
|
||||
* `scripts/check-i18n.mjs` reports the coverage. Add new fragments here as the
|
||||
* remaining namespaces land.
|
||||
*/
|
||||
const th = {
|
||||
const th = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -46,6 +41,8 @@ const th = {
|
|||
...batch17,
|
||||
...batch18,
|
||||
...batch19,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default th;
|
||||
|
|
|
|||
315
src/i18n/tr/drift.ts
Normal file
315
src/i18n/tr/drift.ts
Normal file
|
|
@ -0,0 +1,315 @@
|
|||
const driftStrings = {
|
||||
nav: {
|
||||
searchLanguages: 'Dil ara...',
|
||||
noLanguages: 'Dil bulunamadı',
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: 'Yerler',
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: 'Başla',
|
||||
firstRunAddSpot: 'İlk spotunu ekle',
|
||||
firstRunJoinCrew: "Bir crew'e katıl",
|
||||
firstRunStartCrew: "Crew'ini kur",
|
||||
firstRunWallet: 'Cüzdanını kur',
|
||||
forecastDays: '{{count}} Günlük Tahmin',
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: '{{count}} Günlük Tahmin',
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: 'iptal edildi',
|
||||
stateVerifying: 'doğrulanıyor',
|
||||
},
|
||||
loadFailed: "Relay'lere ulaşılamadı. Bağlantını kontrol et ve tekrar dene.",
|
||||
statusPending: 'bekliyor',
|
||||
offers: {
|
||||
closeDeal: 'Anlaşmayı kapat',
|
||||
loadFailed: 'Teklifler yüklenemedi. Bağlantını kontrol et ve tekrar dene.',
|
||||
},
|
||||
pay: {
|
||||
nonSats: 'Bu teklifin fiyatı {{currency}} cinsinden. Uygulama içi ödeme yalnızca sats. Satıcıyla doğrudan anlaş.',
|
||||
unsupported: 'Bu ödeme kodu (bir Cashu isteği) henüz desteklenmiyor. Satıcıdan bir Lightning faturası veya adresi iste.',
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: 'Para emanette kilitli ve bu cihazda kayıtlı, ama istek gönderilemedi. Tekrar denemek için ilanı yeniden aç. Tekrar ödeme yapma.',
|
||||
mintLabel: 'Mint (paranın kilitlendiği yer)',
|
||||
sellerMintHint: "Satıcı bu mint'i tercih ediyor; burada kilitlenen para onlar için en kolay kullanılır.",
|
||||
mintHint: "Emanet bu mint'te yaşıyor. Satıcı burada kullanıyor, o yüzden ikinizin de güvendiği bir tane seç.",
|
||||
noMints: 'Kullanılabilir mint yok',
|
||||
p2pkUnsupported: 'Bu mint P2PK (NUT-11) desteğini duyurmuyor, bu yüzden emanet burada kilitlenemez. Başka bir mint seç.',
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: 'Giyim Sun',
|
||||
tabClothing: 'Giyim',
|
||||
empty: {
|
||||
clothingTitle: 'Henüz giyim tasarımcısı yok',
|
||||
clothingBody: 'Scene için özel kıyafet, takım forması ve giyim sunan ilk kişi ol.',
|
||||
},
|
||||
craftFields: {
|
||||
sizing: 'Beden Aralığı',
|
||||
samples: 'Numune / Prototip',
|
||||
customization: 'Kişiselleştirme',
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: 'SkateSpots koordinatörü',
|
||||
ourDefaultDesc: "SkateSpots, relay.skate-spots.org'da bir koordinatör çalıştırır. Varsayılan olarak onu kullan ya da kendininkini çalıştır — bir koordinatör yalnızca şifreli metni ve üst veriyi görür, mesajlarını asla görmez.",
|
||||
useOurs: 'SkateSpots koordinatörünü kullan',
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: 'Şifreli sohbet',
|
||||
privateChatName: 'Özel sohbet',
|
||||
privateChatDesc: 'Bir koordinatör üzerinden ileri-gizli grup sohbeti (MLS).',
|
||||
privateChatDescFull: 'Özel sohbet bir yönetici tarafından bir kez oluşturulur, sonra üyeler katılır.',
|
||||
chatRowDesc: "Crew'deki herkes — her üyenin anahtarına mühürlü (NIP-17).",
|
||||
openChat: 'Aç',
|
||||
setUpChat: 'Kur',
|
||||
joinChat: 'Katıl',
|
||||
checking: 'Kontrol ediliyor…',
|
||||
openInAnotherApp: 'Başka uygulamada aç',
|
||||
openInCordnWeb: 'Cordn (web)',
|
||||
openCordnGroup: 'Crew sohbetini aç',
|
||||
copyForStaircase: 'Staircase için kopyala',
|
||||
},
|
||||
dms: {
|
||||
refresh: 'Yenile',
|
||||
crews: "Crew'ler",
|
||||
crewFounder: 'Kurucu',
|
||||
crewMember: 'Üye',
|
||||
crewOpen: 'Aç',
|
||||
crewSetUp: 'Kur',
|
||||
},
|
||||
form: {
|
||||
cordnGroup: 'Cordn grubu',
|
||||
cordnGroupHint: "İsteğe bağlı: Staircase veya Cordn web'den grup bağlantısını yapıştır. Crew'in böylece koordinatörümüzde barındırılan gerçek uçtan uca MLS sohbetine kavuşur.",
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: 'Güven',
|
||||
trustSub: 'Kaynaklar ve görünüm',
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: 'Sessize al',
|
||||
muted: 'Sessize alındı',
|
||||
mutedDesc: 'İçeriklerini görmezsin.',
|
||||
muteFailed: 'Sessize alınamadı. Tekrar dene.',
|
||||
loginToMute: 'Sessize almak için giriş yap.',
|
||||
attributedNetwork: 'Ağındaki kişilerden',
|
||||
attributedProviderHouse: 'Topluluk güven sağlayıcısından',
|
||||
attributedProviderCustom: 'Seçtiğin sağlayıcıdan',
|
||||
howItWorks: 'Güven nasıl çalışır',
|
||||
flaggedNoticeTitle: 'Güvenilir kaykaycılar tarafından bildirildi',
|
||||
flaggedNoticeDesc: 'Dikkatli ol. Ağdaki güvenilir kişiler bu hesabı bildirdi.',
|
||||
flaggedReporterFollow: 'takip ettiğin {{count}} kişi',
|
||||
flaggedReporterNetwork: 'ağındaki {{count}} kişi',
|
||||
flaggedReporterOther: '{{count}} diğer hesap',
|
||||
flaggedReport: 'Bildir',
|
||||
flaggedDismiss: 'Yoksay',
|
||||
bucketVerified: 'Doğrulandı',
|
||||
bucketUnknown: 'Bilinmiyor',
|
||||
bucketFlagged: 'İşaretlendi',
|
||||
bucketVerifiedDesc: 'Ağındaki biri bu hesap için kefil oluyor.',
|
||||
bucketUnknownDesc: 'Ağındaki kimse henüz bu hesap için kefil olmadı.',
|
||||
bucketFlaggedDesc: 'Güvenilir kişiler bu hesabı bildirdi.',
|
||||
reportedByTrusted: '{{count}} güvenilir kişi tarafından bildirildi',
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: 'Ağ uyarıları',
|
||||
alertsDesc: 'Takip ettiğin ve güvenilir kişilerin bildirdiği ya da sessize aldığı hesaplar.',
|
||||
alertsEmpty: 'Uyarı yok. Takip ettiğin hesapları güvenilir bildirimler için kontrol ederiz.',
|
||||
alertsReported: '{{count}} güvenilir kişi tarafından bildirildi',
|
||||
alertsMuted: '{{count}} güvenilir kişi tarafından sessize alındı',
|
||||
alertsIgnore: 'Yoksay',
|
||||
alertsUnfollow: 'Takibi bırak',
|
||||
alertsLogin: 'Takip ettiğin hesaplar için uyarıları görmek üzere giriş yap.',
|
||||
providerTitle: 'Sağlayıcı',
|
||||
providerDesc: 'Puanlar seçtiğin bir sağlayıcıdan gelir. Topluluk sağlayıcısı varsayılandır.',
|
||||
useCommunity: 'Topluluk sağlayıcısını kullan',
|
||||
setProvider: 'Bir sağlayıcı ayarla',
|
||||
customPubkeyPlaceholder: 'Sağlayıcı npub veya hex pubkey',
|
||||
customRelayPlaceholder: 'wss://relay.example.com',
|
||||
invalidProvider: "Geçerli bir npub veya 64 karakterlik hex pubkey ve bir wss:// relay'i gir.",
|
||||
publishFailed: 'Sağlayıcı yayınlanamadı. Tekrar dene.',
|
||||
providerSaved: 'Sağlayıcı güncellendi.',
|
||||
loggedOutProvider: 'Sağlayıcı seçmek için giriş yap.',
|
||||
showMarks: 'Güven işaretlerini göster',
|
||||
showMarksDesc: 'Doğrulanmış ve bilinmeyen işaretler. Bildirimler her zaman gösterilir.',
|
||||
sourceLabel: 'Kaynak',
|
||||
sourceHouse: 'Topluluk güven sağlayıcısı',
|
||||
sourceCustom: 'Senin sağlayıcın',
|
||||
loggedOut: 'Kendi güven sağlayıcını seçmek için giriş yap.',
|
||||
seoTitle: 'Güven nasıl çalışır',
|
||||
seoDescription: 'SkateSpots güveni nasıl gösterir: üç durum, puanların nereden geldiği ve yokluğun neden güvensizlik olmadığı.',
|
||||
title: 'Güven nasıl çalışır',
|
||||
intro: 'Buradaki güven bir sinyaldir, bir hüküm değil. Kimi tanıdığından ya da seçtiğin bir sağlayıcıdan gelir. İnsanları küresel olarak sıralamayız.',
|
||||
statesTitle: 'Üç durum',
|
||||
verifiedTitle: 'Doğrulandı',
|
||||
verifiedDesc: 'Ağındaki biri bu hesap için kefil oluyor: bir arkadaşının arkadaşı ya da seçtiğin sağlayıcı.',
|
||||
unknownTitle: 'Bilinmiyor',
|
||||
unknownDesc: 'Henüz kimse kefil olmadı. Her yeni hesap buradan başlar.',
|
||||
flaggedTitle: 'İşaretlendi',
|
||||
flaggedDesc: 'Güvenilir kişiler bu hesabı bildirdi. Bu, daha yakından bakman için bir uyarıdır, bir şeyin kanıtı değil.',
|
||||
absenceTitle: 'Rozet yokluğu güvensizlik değildir',
|
||||
absenceDesc: 'Çoğu hesap hiçbir şey göstermez. Bu, ağındaki kimsenin henüz onlar için kefil olmadığı anlamına gelir, bir şeyin yanlış olduğu değil. Eksik bir işareti asla olumsuz okuma.',
|
||||
sourceTitle: 'Bunu kim hesaplıyor',
|
||||
sourceDesc: 'Varsayılan olarak kendi ağını kullanırız. Nostr üzerinden imzalı puanlar yayınlayan bir güven sağlayıcısı da seçebilirsin (NIP-85) ya da görünümü kapatabilirsin. İşaretlendi her zaman gösterilir, çünkü bu bir güvenlik sinyalidir.',
|
||||
endorsementTitle: 'Varlık onay değildir',
|
||||
endorsementDesc: 'Doğrulanmış işaret birinin kefil olduğu anlamına gelir, kişinin iyi olduğu değil. Bir işaret, güvenilir kişilerin onu bildirdiği anlamına gelir, suçlu olduğu değil. Karar vermeden önce ayrıntıları kontrol et.',
|
||||
povTitle: 'Bakış açısına bağlı',
|
||||
povDesc: 'Bir puan, bakan kişiye görecelidir. Bir sağlayıcıdan veya bir kişiden gelen sıralama bir diğeriyle karşılaştırılamaz ve biz hiçbirini nesnel bir gerçek olarak sunmayız.',
|
||||
settingsCta: "Ayarlar'dan yönet",
|
||||
},
|
||||
marketTerms: {
|
||||
link: 'Pazar yeri kuralları',
|
||||
seoTitle: 'Pazar yeri kuralları',
|
||||
seoDescription: 'SkateSpots ekipman ilanları nasıl çalışır: eşten eşe, alıcı dikkatli olsun ve kurallar.',
|
||||
title: 'Pazar yeri kuralları',
|
||||
intro: 'SkateSpots eşten eşe bir ekipman panosudur. Doğrudan diğer kişiyle anlaşırsın: biz para tutmayız, ürün göndermeyiz veya anlaşmazlıkları çözmeyiz.',
|
||||
howTitle: 'Nasıl çalışır',
|
||||
howBody: 'Ekipman ilanı ver, satıcıyla özel mesajla iletişime geç ve doğrudan anlaş (nakit, Lightning veya takas). Sepet ya da ödeme adımı yoktur.',
|
||||
rulesTitle: 'İzin verilmeyenler',
|
||||
rulesBody: 'Yasa dışı, tehlikeli veya yetişkin içeriği yok; uyuşturucu, silah, sahte veya çalıntı ürün yok. İlanları kaykay ekipmanı ve ilgili ürünlerle sınırlı tut.',
|
||||
respectTitle: 'Saygılı ol',
|
||||
respectBody: 'Kötüye kullanım, taciz, tehdit veya nefret yok. Moderatörler ilanları veya hesapları gizleyebilir.',
|
||||
trustTitle: 'Güven bir kılavuzdur, garanti değil',
|
||||
trustBody: 'Doğrulama işaretleri ve ticaret itibarı ağdan gelen sinyallerdir, söz değil. Takas etmeden önce kendi kontrollerini yap.',
|
||||
trustLink: 'Güven nasıl çalışır',
|
||||
privacyLink: 'Cihazından ne çıkıyor',
|
||||
safetyTitle: 'Güvenli takas yap',
|
||||
safetyBody: 'Teslim için halka açık bir yerde buluş, kargolu anlaşmalar için emanet veya iyi niyet depozitosu kullan ve uygulama dışına asla para gönderme.',
|
||||
moderationTitle: 'Moderasyon yumuşak ve geri alınabilir',
|
||||
moderationBody: "Gizlenen içerik relay'lerde kalır ve geri getirilebilir; kişiler arasındaki anlaşmazlıkları çözmek sana bağlıdır.",
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: 'Tişörtler',
|
||||
hoodies: "Kapüşonlular & Sweatshirt'ler",
|
||||
pants: 'Pantolonlar & Şortlar',
|
||||
jackets: 'Ceketler & Dış Giyim',
|
||||
kits: "Takım Formaları & Jersey'ler",
|
||||
caps: 'Şapkalar & Bereler',
|
||||
socks: 'Çoraplar',
|
||||
accessories: 'Çantalar & Aksesuarlar',
|
||||
footwear: 'Ayakkabılar',
|
||||
patches: 'Yamalar & Aplik',
|
||||
griptape: 'Griptape Sanatı & Deck Giyimi',
|
||||
onepiece: 'Tek Parça / Upcycled',
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: 'Özel tişörtler ve üstler',
|
||||
hoodies: "Kapüşonlular, crew'ler ve eşofman altları",
|
||||
pants: 'İş pantolonları, kargo ve şortlar',
|
||||
jackets: 'Coach, rüzgarlık ve iş ceketleri',
|
||||
kits: "Takım formaları, jersey'ler ve üniformalar",
|
||||
caps: 'Şapkalar, bereler ve başlıklar',
|
||||
socks: 'Crew çorapları ve triko',
|
||||
accessories: 'Çantalar, kemerler ve küçük ürünler',
|
||||
footwear: 'Özel ayakkabılar ve ayakkabı',
|
||||
patches: 'Nakış yamalar ve aplik',
|
||||
griptape: 'Griptape sanatı ve deck giyimi',
|
||||
onepiece: 'Tek parçalar ve upcycled giysiler',
|
||||
},
|
||||
method: {
|
||||
screenprint: 'Serigrafi',
|
||||
dtg: 'DTG / Doğrudan Kumaşa',
|
||||
embroidery: 'Nakış',
|
||||
cutsew: 'Kes & Dik',
|
||||
sublimation: 'Süblimasyon',
|
||||
heattransfer: 'Isı Transferi / Vinil',
|
||||
garmentdye: 'Kıyafet Boyama',
|
||||
knit: 'Triko',
|
||||
patchwork: 'Patchwork',
|
||||
allover: 'Tüm Yüzey Baskı',
|
||||
},
|
||||
material: {
|
||||
cotton: 'Pamuk',
|
||||
heavyweight: 'Ağır Gramaj',
|
||||
organic: 'Organik / Sürdürülebilir',
|
||||
fleece: 'Polar',
|
||||
denim: 'Denim',
|
||||
canvas: 'Kanvas',
|
||||
nylon: 'Naylon / Teknik',
|
||||
wool: 'Merino / Yün',
|
||||
leather: 'Deri',
|
||||
recycled: 'Geri Dönüşüm / Deadstock',
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: 'Giyim Tasarımcısı Ol - SkateSpots',
|
||||
seoDescription: 'Scene için özel kıyafetler, takım formaları & giyim.',
|
||||
heading: 'Giyim Tasarımcısı',
|
||||
tagline: 'Scene için özel kıyafetler, takım formaları & giyim',
|
||||
noun: 'giyim tasarımcısı',
|
||||
rateLabel: 'Ücret',
|
||||
portfolioLabel: 'Dükkan / portföy bağlantısı',
|
||||
sectionWhatYouMake: 'Ne Yapıyorsun',
|
||||
sectionHowYouMake: 'Nasıl Yapıyorsun',
|
||||
sectionMaterials: 'Malzemeler',
|
||||
minimumPlaceholder: 'örn. 10 parça',
|
||||
turnaroundPlaceholder: 'örn. 2-3 hafta',
|
||||
sizingPlaceholder: 'örn. XS-3XL / ölçüye göre',
|
||||
samplesHelper: 'Tam üretimden önce numune veya prototip sunuyor musun?',
|
||||
customizationPlaceholder: 'örn. isimler, numaralar, grafikler',
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: 'Güncellendi',
|
||||
refresh: 'Yenile',
|
||||
unavailable: 'Hava durumu kullanılamıyor.',
|
||||
retry: 'Tekrar dene',
|
||||
sunrise: 'Gün doğumu',
|
||||
sunset: 'Gün batımı',
|
||||
legendTitle: 'Hava puanı',
|
||||
legendWeatherOnly: 'Yalnızca hava',
|
||||
},
|
||||
cordnUi: {
|
||||
title: 'Özel sohbet',
|
||||
subtitle: 'Crew üyeleri arasında uçtan uca şifreli (MLS). Koordinatör yalnızca şifreli metni ve üst veriyi yönlendirir — mesaj içeriğini asla görmez.',
|
||||
notLoggedIn: "Crew'in özel sohbetini kullanmak için giriş yap.",
|
||||
membersOnly: 'Özel sohbeti yalnızca crew üyeleri açabilir.',
|
||||
connecting: 'Bağlanıyor…',
|
||||
noCoordinator: 'Bu crew için henüz bir koordinatör yapılandırılmadı.',
|
||||
noGroupAdmin: "Bu crew'in özel sohbeti henüz oluşturulmadı.",
|
||||
noGroupMember: "Henüz bu crew'in özel sohbetinde değilsin.",
|
||||
create: 'Özel sohbeti oluştur',
|
||||
requestJoin: 'Katılmayı iste',
|
||||
checkInvite: 'Davetiye kontrol et',
|
||||
requested: 'İstek gönderildi — bir crew yöneticisi onaylayacak.',
|
||||
noInvite: 'Henüz bekleyen davetiye yok. Bir yöneticiden isteğini onaylamasını iste.',
|
||||
placeholder: "Crew'e mesaj gönder…",
|
||||
send: 'Gönder',
|
||||
refresh: 'Yenile',
|
||||
requests: 'Katılma istekleri',
|
||||
checkRequests: 'İstekleri kontrol et',
|
||||
approve: 'Ekle',
|
||||
noRequests: 'Bekleyen katılma isteği yok.',
|
||||
inviteHint: "Bu sohbette şu ana kadar yalnızca sen varsın — crew üyeleri “Katılmayı iste”ye dokunabilir, sonra burada onaylarsın.",
|
||||
memberCount: 'grupta {{count}} kişi',
|
||||
you: 'Sen',
|
||||
groupRef: 'Grup bağlantısı',
|
||||
copyRef: 'Kopyala',
|
||||
copied: 'Kopyalandı',
|
||||
attachImage: 'Görsel ekle',
|
||||
uploading: 'Yükleniyor…',
|
||||
uploadFailed: 'Görsel yüklenemedi.',
|
||||
bannerTitle: "Bu crew'in henüz özel sohbeti yok",
|
||||
bannerBody: "Crew'in için uçtan uca şifreli (MLS) sohbet kur — üyeler sekmeden katılır.",
|
||||
bannerCta: 'Kur',
|
||||
ready: 'Bağlandı · MLS',
|
||||
errorPrefix: 'Koordinatöre ulaşılamadı',
|
||||
interactiveHint: "İmzalayıcın her işlem için onay ister — gerektiğinde Yenile ve Gönder'i kullan.",
|
||||
},
|
||||
};
|
||||
|
||||
export default driftStrings;
|
||||
|
|
@ -6,8 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
const tr = {
|
||||
const tr = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -16,6 +19,8 @@ const tr = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default tr;
|
||||
|
|
|
|||
323
src/i18n/uk/drift.ts
Normal file
323
src/i18n/uk/drift.ts
Normal file
|
|
@ -0,0 +1,323 @@
|
|||
/**
|
||||
* uk — translation drift fragment.
|
||||
*
|
||||
* The keys added to `en` after the original batch pass. Kept in their own
|
||||
* module so this pass never touches the batch files. Composed into `uk` in
|
||||
* `index.ts` via a deep merge (a shallow spread would clobber the sibling
|
||||
* keys already present in the batches, e.g. `socialUi`, `walletUi`).
|
||||
*/
|
||||
const drift = {
|
||||
nav: {
|
||||
searchLanguages: "Пошук мов...",
|
||||
noLanguages: "Мов не знайдено",
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: "Місця",
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: "Почніть",
|
||||
firstRunAddSpot: "Додайте перший Spot",
|
||||
firstRunJoinCrew: "Приєднатися до команди",
|
||||
firstRunStartCrew: "Створіть свою команду",
|
||||
firstRunWallet: "Налаштуйте гаманець",
|
||||
forecastDays: "Прогноз на {{count}} днів",
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: "Прогноз на {{count}} днів",
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: "відкликано",
|
||||
stateVerifying: "перевірка",
|
||||
},
|
||||
loadFailed: "Не вдалося зв'язатися з релеями. Перевірте з'єднання та спробуйте знову.",
|
||||
statusPending: "в очікуванні",
|
||||
offers: {
|
||||
closeDeal: "Закрити угоду",
|
||||
loadFailed: "Не вдалося завантажити пропозиції. Перевірте з'єднання та спробуйте знову.",
|
||||
},
|
||||
pay: {
|
||||
nonSats: "Цю пропозицію оцінено в {{currency}}. Оплата в застосунку — лише в sats. Розрахуйтеся безпосередньо з продавцем.",
|
||||
unsupported: "Цей платіжний код (запит Cashu) поки не підтримується. Попросіть у продавця Lightning-рахунок або адресу.",
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: "Кошти заблоковано в escrow і збережено на цьому пристрої, але запит не надіслано. Відкрийте оголошення знову, щоб повторити. Не платіть ще раз.",
|
||||
mintLabel: "Mint (де заблоковано кошти)",
|
||||
sellerMintHint: "Продавець віддає перевагу цьому mint; кошти, заблоковані тут, йому найлегше отримати.",
|
||||
mintHint: "Escrow зберігається в цьому mint. Продавець погашає тут, тож виберіть той, якому довіряєте обидва.",
|
||||
noMints: "Немає доступних mint",
|
||||
p2pkUnsupported: "Цей mint не заявляє підтримку P2PK (NUT-11), тож escrow тут заблокувати не можна. Виберіть інший mint.",
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: "Запропонувати одяг",
|
||||
tabClothing: "Одяг",
|
||||
empty: {
|
||||
clothingTitle: "Дизайнерів одягу поки немає",
|
||||
clothingBody: "Станьте першим, хто запропонує кастомний одяг, командні комплекти й екіпірування для сцени.",
|
||||
},
|
||||
craftFields: {
|
||||
sizing: "Діапазон розмірів",
|
||||
samples: "Зразки / прототипи",
|
||||
customization: "Кастомізація",
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: "Координатор SkateSpots",
|
||||
ourDefaultDesc: "SkateSpots запускає координатор на relay.skate-spots.org. Використовуйте його за замовчуванням або запустіть власний — координатор бачить лише шифротекст і метадані, ніколи ваші повідомлення.",
|
||||
useOurs: "Використати координатор SkateSpots",
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: "Зашифрований чат",
|
||||
privateChatName: "Приватний чат",
|
||||
privateChatDesc: "Груповий чат із прямою секретністю (MLS) через координатор.",
|
||||
privateChatDescFull: "Приватний чат створює адміністратор один раз, потім учасники приєднуються.",
|
||||
chatRowDesc: "Усі в команді — запечатано ключем кожного учасника (NIP-17).",
|
||||
openChat: "Відкрити",
|
||||
setUpChat: "Налаштувати",
|
||||
joinChat: "Приєднатися",
|
||||
checking: "Перевірка…",
|
||||
openInAnotherApp: "Відкрити в іншому застосунку",
|
||||
openInCordnWeb: "Cordn (веб)",
|
||||
openCordnGroup: "Відкрити чат команди",
|
||||
copyForStaircase: "Копіювати для Staircase",
|
||||
},
|
||||
dms: {
|
||||
refresh: "Оновити",
|
||||
crews: "Команди",
|
||||
crewFounder: "Засновник",
|
||||
crewMember: "Учасник",
|
||||
crewOpen: "Відкрити",
|
||||
crewSetUp: "Налаштувати",
|
||||
},
|
||||
form: {
|
||||
cordnGroup: "Група Cordn",
|
||||
cordnGroupHint: "Необов'язково: вставте посилання на групу зі Staircase або Cordn (веб). Тоді ваша команда отримає справжній наскрізний MLS-чат на нашому координаторі.",
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: "Довіра",
|
||||
trustSub: "Джерела та відображення",
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: "Заглушити",
|
||||
muted: "Заглушено",
|
||||
mutedDesc: "Ви не бачитимете їхній вміст.",
|
||||
muteFailed: "Не вдалося заглушити. Спробуйте знову.",
|
||||
loginToMute: "Увійдіть, щоб заглушити.",
|
||||
attributedNetwork: "Від людей з вашої мережі",
|
||||
attributedProviderHouse: "Від спільного провайдера довіри",
|
||||
attributedProviderCustom: "Від обраного вами провайдера",
|
||||
howItWorks: "Як працює довіра",
|
||||
flaggedNoticeTitle: "Повідомлено довіреними скейтерами",
|
||||
flaggedNoticeDesc: "Будьте обережні. Довірені люди в мережі повідомили про цей акаунт.",
|
||||
flaggedReporterFollow: "{{count}} з ваших підписок",
|
||||
flaggedReporterNetwork: "{{count}} з вашої мережі",
|
||||
flaggedReporterOther: "{{count}} інших акаунтів",
|
||||
flaggedReport: "Поскаржитися",
|
||||
flaggedDismiss: "Відхилити",
|
||||
bucketVerified: "Підтверджено",
|
||||
bucketUnknown: "Невідомо",
|
||||
bucketFlagged: "Позначено",
|
||||
bucketVerifiedDesc: "Хтось із вашої мережі поручився за цей акаунт.",
|
||||
bucketUnknownDesc: "Поки ніхто з вашої мережі не поручився за цей акаунт.",
|
||||
bucketFlaggedDesc: "Довірені люди повідомили про цей акаунт.",
|
||||
reportedByTrusted: "Повідомлено {{count}} довіреними людьми",
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: "Мережеві оповіщення",
|
||||
alertsDesc: "Акаунти, за якими ви стежите, про які повідомили або які заглушили довірені люди.",
|
||||
alertsEmpty: "Немає оповіщень. Ми перевіряємо акаунти, за якими ви стежите, на повідомлення від довірених людей.",
|
||||
alertsReported: "Повідомлено {{count}} довіреними людьми",
|
||||
alertsMuted: "Заглушено {{count}} довіреними людьми",
|
||||
alertsIgnore: "Ігнорувати",
|
||||
alertsUnfollow: "Відписатися",
|
||||
alertsLogin: "Увійдіть, щоб бачити оповіщення щодо акаунтів, за якими стежите.",
|
||||
providerTitle: "Провайдер",
|
||||
providerDesc: "Оцінки надходять від обраного вами провайдера. Спільний провайдер — за замовчуванням.",
|
||||
useCommunity: "Використати спільного провайдера",
|
||||
setProvider: "Вказати провайдера",
|
||||
customPubkeyPlaceholder: "npub або hex-публічний ключ провайдера",
|
||||
customRelayPlaceholder: "wss://relay.example.com",
|
||||
invalidProvider: "Введіть дійсний npub або 64-символьний hex-публічний ключ і релей wss://.",
|
||||
publishFailed: "Не вдалося опублікувати провайдера. Спробуйте знову.",
|
||||
providerSaved: "Провайдера оновлено.",
|
||||
loggedOutProvider: "Увійдіть, щоб вибрати провайдера.",
|
||||
showMarks: "Показувати позначки довіри",
|
||||
showMarksDesc: "Підтверджені та невідомі позначки. Повідомлення показуються завжди.",
|
||||
sourceLabel: "Джерело",
|
||||
sourceHouse: "Спільний провайдер довіри",
|
||||
sourceCustom: "Ваш провайдер",
|
||||
loggedOut: "Увійдіть, щоб вибрати власного провайдера довіри.",
|
||||
seoTitle: "Як працює довіра",
|
||||
seoDescription: "Як SkateSpots показує довіру: три стани, звідки беруться оцінки й чому відсутність позначки — не недовіра.",
|
||||
title: "Як працює довіра",
|
||||
intro: "Довіра тут — сигнал, а не вирок. Вона походить від тих, кого ви знаєте, або від обраного вами провайдера. Ми не складаємо глобальний рейтинг людей.",
|
||||
statesTitle: "Три стани",
|
||||
verifiedTitle: "Підтверджено",
|
||||
verifiedDesc: "Хтось із вашої мережі поручився за цей акаунт: друг друга або обраний вами провайдер.",
|
||||
unknownTitle: "Невідомо",
|
||||
unknownDesc: "Поки ніхто не поручився. З цього починається кожен новий акаунт.",
|
||||
flaggedTitle: "Позначено",
|
||||
flaggedDesc: "Довірені люди повідомили про цей акаунт. Це попередження придивитися, а не доказ чогось.",
|
||||
absenceTitle: "Відсутність позначки — не недовіра",
|
||||
absenceDesc: "У більшості акаунтів немає жодних позначок. Це означає, що ніхто з вашої мережі поки не поручився за них, а не те, що щось не так. Ніколи не сприймайте відсутню позначку як мінус.",
|
||||
sourceTitle: "Хто це обчислює",
|
||||
sourceDesc: "За замовчуванням ми використовуємо вашу власну мережу. Ви також можете вибрати провайдера довіри, який публікує підписані оцінки через Nostr (NIP-85), або вимкнути відображення. Позначене показується завжди, бо це сигнал безпеки.",
|
||||
endorsementTitle: "Присутність — не схвалення",
|
||||
endorsementDesc: "Підтверджена позначка означає, що хтось поручився, а не що людина хороша. Позначка «позначено» означає, що довірені люди повідомили про неї, а не що вона винна. Перевірте деталі, перш ніж вирішувати.",
|
||||
povTitle: "Усе залежить від точки зору",
|
||||
povDesc: "Оцінка відносна до того, хто дивиться. Рейтинг від одного провайдера чи людини незрівнянний з іншим, і ми ніколи не подаємо його як об'єктивний факт.",
|
||||
settingsCta: "Керувати в налаштуваннях",
|
||||
},
|
||||
marketTerms: {
|
||||
link: "Правила маркетплейсу",
|
||||
seoTitle: "Правила маркетплейсу",
|
||||
seoDescription: "Як працюють оголошення спорядження на SkateSpots: напряму між людьми, покупець будь уважний, і правила.",
|
||||
title: "Правила маркетплейсу",
|
||||
intro: "SkateSpots — дошка оголошень про спорядження напряму між людьми. Ви маєте справу безпосередньо з іншою людиною: ми не тримаємо кошти, не надсилаємо товари й не вирішуємо спори.",
|
||||
howTitle: "Як це працює",
|
||||
howBody: "Виставте спорядження, зв'яжіться з продавцем у приватному повідомленні та розрахуйтеся напряму (готівка, Lightning або обмін). Кошика чи оформлення замовлення немає.",
|
||||
rulesTitle: "Що заборонено",
|
||||
rulesBody: "Жодного незаконного, небезпечного чи дорослого контенту; жодних наркотиків, зброї, підроблених чи крадених товарів. Оголошення мають стосуватися скейт-спорядження та пов'язаних речей.",
|
||||
respectTitle: "Поважайте інших",
|
||||
respectBody: "Жодних образ, переслідування, погроз чи ненависті. Модератори можуть приховувати оголошення чи акаунти.",
|
||||
trustTitle: "Довіра — орієнтир, а не гарантія",
|
||||
trustBody: "Позначки підтвердження та торгова репутація — це сигнали з мережі, а не обіцянки. Перевіряйте самі, перш ніж торгувати.",
|
||||
trustLink: "Як працює довіра",
|
||||
privacyLink: "Що залишає ваш пристрій",
|
||||
safetyTitle: "Торгуйте безпечно",
|
||||
safetyBody: "Зустрічайтеся в громадських місцях для передачі, використовуйте escrow або добросовісний задаток для відправлених угод і ніколи не надсилайте гроші поза застосунком.",
|
||||
moderationTitle: "Модерація м'яка й оборотна",
|
||||
moderationBody: "Прихований вміст залишається на релеях і може бути відновлений; спори між людьми — ваша справа.",
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: "Футболки",
|
||||
hoodies: "Худі та світшоти",
|
||||
pants: "Штани та шорти",
|
||||
jackets: "Куртки та верхній одяг",
|
||||
kits: "Командні комплекти та джерсі",
|
||||
caps: "Кепки та шапки",
|
||||
socks: "Шкарпетки",
|
||||
accessories: "Сумки та аксесуари",
|
||||
footwear: "Взуття",
|
||||
patches: "Патчі та аплікації",
|
||||
griptape: "Гриптейп та одяг для дек",
|
||||
onepiece: "Одиничні речі / апсайклінг",
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: "Кастомні футболки та топи",
|
||||
hoodies: "Худі, світшоти та спортивні штани",
|
||||
pants: "Робочі штани, карго та шорти",
|
||||
jackets: "Куртки-коучівки, вітровки та робочі куртки",
|
||||
kits: "Командні комплекти, джерсі та форма",
|
||||
caps: "Кепки, шапки та головні убори",
|
||||
socks: "Високі шкарпетки та трикотаж",
|
||||
accessories: "Сумки, ремені та дрібниці",
|
||||
footwear: "Кастомне взуття",
|
||||
patches: "Вишиті патчі та аплікації",
|
||||
griptape: "Арт на гриптейпі та одяг для дек",
|
||||
onepiece: "Одиничні речі та апсайкл-одяг",
|
||||
},
|
||||
method: {
|
||||
screenprint: "Шовкодрук",
|
||||
dtg: "DTG / прямий друк по тканині",
|
||||
embroidery: "Вишивка",
|
||||
cutsew: "Крій і шиття",
|
||||
sublimation: "Сублімація",
|
||||
heattransfer: "Термотрансфер / вініл",
|
||||
garmentdye: "Фарбування виробів",
|
||||
knit: "Трикотаж",
|
||||
patchwork: "Печворк",
|
||||
allover: "Друк по всій поверхні",
|
||||
},
|
||||
material: {
|
||||
cotton: "Бавовна",
|
||||
heavyweight: "Щільна тканина",
|
||||
organic: "Органіка / сталість",
|
||||
fleece: "Фліс",
|
||||
denim: "Денім",
|
||||
canvas: "Канвас",
|
||||
nylon: "Нейлон / технічні тканини",
|
||||
wool: "Меринос / вовна",
|
||||
leather: "Шкіра",
|
||||
recycled: "Перероблене / сток",
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: "Стати дизайнером одягу - SkateSpots",
|
||||
seoDescription: "Кастомний одяг, командні комплекти та екіпірування для сцени.",
|
||||
heading: "Дизайнер одягу",
|
||||
tagline: "Кастомний одяг, командні комплекти та екіпірування для сцени",
|
||||
noun: "дизайнер одягу",
|
||||
rateLabel: "Ставка",
|
||||
portfolioLabel: "Посилання на магазин / портфоліо",
|
||||
sectionWhatYouMake: "Що ви створюєте",
|
||||
sectionHowYouMake: "Як ви це робите",
|
||||
sectionMaterials: "Матеріали",
|
||||
minimumPlaceholder: "напр. 10 штук",
|
||||
turnaroundPlaceholder: "напр. 2–3 тижні",
|
||||
sizingPlaceholder: "напр. XS–3XL / за мірками",
|
||||
samplesHelper: "Чи пропонуєте ви зразки або прототипи перед повним тиражем?",
|
||||
customizationPlaceholder: "напр. імена, номери, графіка",
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: "Оновлено",
|
||||
refresh: "Оновити",
|
||||
unavailable: "Погода недоступна.",
|
||||
retry: "Повторити",
|
||||
sunrise: "Схід",
|
||||
sunset: "Захід",
|
||||
legendTitle: "Оцінка погоди",
|
||||
legendWeatherOnly: "Лише погода",
|
||||
},
|
||||
cordnUi: {
|
||||
title: "Приватний чат",
|
||||
subtitle: "Наскрізне шифрування (MLS) між учасниками команди. Координатор маршрутизує лише шифротекст і метадані — він ніколи не бачить вміст повідомлень.",
|
||||
notLoggedIn: "Увійдіть, щоб користуватися приватним чатом команди.",
|
||||
membersOnly: "Лише учасники команди можуть відкрити приватний чат.",
|
||||
connecting: "Підключення…",
|
||||
noCoordinator: "Для цієї команди ще не налаштовано координатор.",
|
||||
noGroupAdmin: "Приватний чат цієї команди ще не створено.",
|
||||
noGroupMember: "Ви ще не в приватному чаті цієї команди.",
|
||||
create: "Створити приватний чат",
|
||||
requestJoin: "Попросити приєднатися",
|
||||
checkInvite: "Перевірити запрошення",
|
||||
requested: "Запит надіслано — адміністратор команди його схвалить.",
|
||||
noInvite: "Запрошення ще не чекає. Попросіть адміністратора схвалити ваш запит.",
|
||||
placeholder: "Повідомлення для команди…",
|
||||
send: "Надіслати",
|
||||
refresh: "Оновити",
|
||||
requests: "Запити на приєднання",
|
||||
checkRequests: "Перевірити запити",
|
||||
approve: "Додати",
|
||||
noRequests: "Немає запитів на приєднання, що очікують.",
|
||||
inviteHint: "Поки в цьому чаті лише ви — учасники команди можуть натиснути «Попросити приєднатися», а ви схвалите їх тут.",
|
||||
memberCount: "{{count}} у групі",
|
||||
you: "Ви",
|
||||
groupRef: "Посилання на групу",
|
||||
copyRef: "Копіювати",
|
||||
copied: "Скопійовано",
|
||||
attachImage: "Прикріпити зображення",
|
||||
uploading: "Завантаження…",
|
||||
uploadFailed: "Не вдалося завантажити зображення.",
|
||||
bannerTitle: "У цієї команди ще немає приватного чату",
|
||||
bannerBody: "Налаштуйте наскрізно зашифрований (MLS) чат для вашої команди — учасники приєднуються з вкладки.",
|
||||
bannerCta: "Налаштувати",
|
||||
ready: "Підключено · MLS",
|
||||
errorPrefix: "Не вдалося зв'язатися з координатором",
|
||||
interactiveHint: "Ваш підписувач запитує підтвердження для кожної дії — використовуйте «Оновити» та «Надіслати» за потреби.",
|
||||
},
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,8 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
const uk = {
|
||||
const uk = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -16,6 +19,8 @@ const uk = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default uk;
|
||||
|
|
|
|||
315
src/i18n/vi/drift.ts
Normal file
315
src/i18n/vi/drift.ts
Normal file
|
|
@ -0,0 +1,315 @@
|
|||
const driftStrings = {
|
||||
nav: {
|
||||
searchLanguages: 'Tìm ngôn ngữ...',
|
||||
noLanguages: 'Không tìm thấy ngôn ngữ nào',
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: 'Địa điểm',
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: 'Bắt đầu',
|
||||
firstRunAddSpot: 'Thêm spot đầu tiên của bạn',
|
||||
firstRunJoinCrew: 'Tham gia một crew',
|
||||
firstRunStartCrew: 'Bắt đầu crew của bạn',
|
||||
firstRunWallet: 'Thiết lập ví của bạn',
|
||||
forecastDays: 'Dự báo {{count}} ngày',
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: 'Dự báo {{count}} ngày',
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: 'đã thu hồi',
|
||||
stateVerifying: 'đang xác minh',
|
||||
},
|
||||
loadFailed: 'Không thể kết nối tới các relay. Kiểm tra kết nối của bạn và thử lại.',
|
||||
statusPending: 'đang chờ',
|
||||
offers: {
|
||||
closeDeal: 'Chốt giao dịch',
|
||||
loadFailed: 'Không thể tải các chào bán. Kiểm tra kết nối của bạn và thử lại.',
|
||||
},
|
||||
pay: {
|
||||
nonSats: 'Chào bán này được định giá bằng {{currency}}. Thanh toán trong ứng dụng chỉ dùng sats. Hãy thanh toán trực tiếp với người bán.',
|
||||
unsupported: 'Mã thanh toán này (yêu cầu Cashu) chưa được hỗ trợ. Hãy hỏi người bán hóa đơn Lightning hoặc địa chỉ.',
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: 'Tiền đã được khóa trong escrow và lưu trên thiết bị này, nhưng yêu cầu chưa được gửi. Mở lại tin đăng để thử lại. Đừng thanh toán lần nữa.',
|
||||
mintLabel: 'Mint (nơi tiền được khóa)',
|
||||
sellerMintHint: 'Người bán thích mint này; tiền khóa ở đây là dễ đổi nhất cho họ.',
|
||||
mintHint: 'Escrow nằm ở mint này. Người bán đổi ở đây, nên hãy chọn mint mà cả hai đều tin tưởng.',
|
||||
noMints: 'Không có mint nào khả dụng',
|
||||
p2pkUnsupported: 'Mint này không công bố hỗ trợ P2PK (NUT-11), nên không thể khóa escrow ở đây. Chọn mint khác.',
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: 'Cung cấp quần áo',
|
||||
tabClothing: 'Quần áo',
|
||||
empty: {
|
||||
clothingTitle: 'Chưa có nhà thiết kế quần áo',
|
||||
clothingBody: 'Hãy là người đầu tiên cung cấp quần áo tùy chỉnh, đồng phục đội và trang phục cho cộng đồng.',
|
||||
},
|
||||
craftFields: {
|
||||
sizing: 'Khoảng kích cỡ',
|
||||
samples: 'Mẫu thử / Nguyên mẫu',
|
||||
customization: 'Tùy chỉnh',
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: 'Điều phối viên SkateSpots',
|
||||
ourDefaultDesc: 'SkateSpots vận hành một điều phối viên tại relay.skate-spots.org. Dùng nó theo mặc định, hoặc tự vận hành của bạn — điều phối viên chỉ thấy bản mã và metadata, không bao giờ thấy tin nhắn của bạn.',
|
||||
useOurs: 'Dùng điều phối viên SkateSpots',
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: 'Chat mã hóa',
|
||||
privateChatName: 'Chat riêng tư',
|
||||
privateChatDesc: 'Chat nhóm bí mật chuyển tiếp (MLS) qua một điều phối viên.',
|
||||
privateChatDescFull: 'Chat riêng tư được tạo một lần bởi quản trị viên, sau đó các thành viên tham gia.',
|
||||
chatRowDesc: 'Mọi người trong crew — được niêm phong bằng khóa của từng thành viên (NIP-17).',
|
||||
openChat: 'Mở',
|
||||
setUpChat: 'Thiết lập',
|
||||
joinChat: 'Tham gia',
|
||||
checking: 'Đang kiểm tra…',
|
||||
openInAnotherApp: 'Mở trong ứng dụng khác',
|
||||
openInCordnWeb: 'Cordn (web)',
|
||||
openCordnGroup: 'Mở chat crew',
|
||||
copyForStaircase: 'Sao chép cho Staircase',
|
||||
},
|
||||
dms: {
|
||||
refresh: 'Làm mới',
|
||||
crews: 'Crews',
|
||||
crewFounder: 'Người sáng lập',
|
||||
crewMember: 'Thành viên',
|
||||
crewOpen: 'Mở',
|
||||
crewSetUp: 'Thiết lập',
|
||||
},
|
||||
form: {
|
||||
cordnGroup: 'Nhóm Cordn',
|
||||
cordnGroupHint: 'Tùy chọn: dán liên kết nhóm từ Staircase hoặc Cordn web. Crew của bạn sau đó có chat MLS đầu-cuối thực sự, được lưu trữ trên điều phối viên của chúng tôi.',
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: 'Tin cậy',
|
||||
trustSub: 'Nguồn và hiển thị',
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: 'Ẩn',
|
||||
muted: 'Đã ẩn',
|
||||
mutedDesc: 'Bạn sẽ không thấy nội dung của họ.',
|
||||
muteFailed: 'Không thể ẩn. Thử lại.',
|
||||
loginToMute: 'Đăng nhập để ẩn.',
|
||||
attributedNetwork: 'Từ những người trong mạng lưới của bạn',
|
||||
attributedProviderHouse: 'Từ nhà cung cấp tin cậy cộng đồng',
|
||||
attributedProviderCustom: 'Từ nhà cung cấp bạn đã chọn',
|
||||
howItWorks: 'Cách tin cậy hoạt động',
|
||||
flaggedNoticeTitle: 'Được báo cáo bởi những skater đáng tin',
|
||||
flaggedNoticeDesc: 'Hãy cẩn thận. Những người đáng tin trong mạng lưới đã báo cáo tài khoản này.',
|
||||
flaggedReporterFollow: '{{count}} người bạn theo dõi',
|
||||
flaggedReporterNetwork: '{{count}} trong mạng lưới của bạn',
|
||||
flaggedReporterOther: '{{count}} tài khoản khác',
|
||||
flaggedReport: 'Báo cáo',
|
||||
flaggedDismiss: 'Bỏ qua',
|
||||
bucketVerified: 'Đã xác minh',
|
||||
bucketUnknown: 'Không rõ',
|
||||
bucketFlagged: 'Bị gắn cờ',
|
||||
bucketVerifiedDesc: 'Ai đó trong mạng lưới của bạn bảo chứng cho tài khoản này.',
|
||||
bucketUnknownDesc: 'Chưa ai trong mạng lưới của bạn bảo chứng cho tài khoản này.',
|
||||
bucketFlaggedDesc: 'Những người đáng tin đã báo cáo tài khoản này.',
|
||||
reportedByTrusted: 'Được báo cáo bởi {{count}} người đáng tin',
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: 'Cảnh báo mạng lưới',
|
||||
alertsDesc: 'Những tài khoản bạn theo dõi mà người đáng tin đã báo cáo hoặc ẩn.',
|
||||
alertsEmpty: 'Không có cảnh báo. Chúng tôi kiểm tra những tài khoản bạn theo dõi để tìm báo cáo đáng tin.',
|
||||
alertsReported: 'Được báo cáo bởi {{count}} người đáng tin',
|
||||
alertsMuted: 'Bị ẩn bởi {{count}} người đáng tin',
|
||||
alertsIgnore: 'Bỏ qua',
|
||||
alertsUnfollow: 'Bỏ theo dõi',
|
||||
alertsLogin: 'Đăng nhập để xem cảnh báo cho những tài khoản bạn theo dõi.',
|
||||
providerTitle: 'Nhà cung cấp',
|
||||
providerDesc: 'Điểm số đến từ nhà cung cấp bạn chọn. Nhà cung cấp cộng đồng là mặc định.',
|
||||
useCommunity: 'Dùng nhà cung cấp cộng đồng',
|
||||
setProvider: 'Đặt nhà cung cấp',
|
||||
customPubkeyPlaceholder: 'npub hoặc pubkey hex của nhà cung cấp',
|
||||
customRelayPlaceholder: 'wss://relay.example.com',
|
||||
invalidProvider: 'Nhập npub hợp lệ hoặc pubkey hex 64 ký tự, và một relay wss://.',
|
||||
publishFailed: 'Không thể công bố nhà cung cấp. Thử lại.',
|
||||
providerSaved: 'Đã cập nhật nhà cung cấp.',
|
||||
loggedOutProvider: 'Đăng nhập để chọn nhà cung cấp.',
|
||||
showMarks: 'Hiện dấu tin cậy',
|
||||
showMarksDesc: 'Dấu đã xác minh và không rõ. Báo cáo luôn hiển thị.',
|
||||
sourceLabel: 'Nguồn',
|
||||
sourceHouse: 'Nhà cung cấp tin cậy cộng đồng',
|
||||
sourceCustom: 'Nhà cung cấp của bạn',
|
||||
loggedOut: 'Đăng nhập để chọn nhà cung cấp tin cậy của riêng bạn.',
|
||||
seoTitle: 'Cách tin cậy hoạt động',
|
||||
seoDescription: 'Cách SkateSpots hiển thị tin cậy: ba trạng thái, điểm số đến từ đâu, và tại sao thiếu vắng không phải là ngờ vực.',
|
||||
title: 'Cách tin cậy hoạt động',
|
||||
intro: 'Tin cậy ở đây là một tín hiệu, không phải phán quyết. Nó đến từ người bạn biết, hoặc từ nhà cung cấp bạn chọn. Chúng tôi không xếp hạng mọi người trên toàn cầu.',
|
||||
statesTitle: 'Ba trạng thái',
|
||||
verifiedTitle: 'Đã xác minh',
|
||||
verifiedDesc: 'Ai đó trong mạng lưới của bạn bảo chứng cho tài khoản này: bạn của bạn bè, hoặc nhà cung cấp bạn chọn.',
|
||||
unknownTitle: 'Không rõ',
|
||||
unknownDesc: 'Chưa ai bảo chứng. Đây là nơi mọi tài khoản mới bắt đầu.',
|
||||
flaggedTitle: 'Bị gắn cờ',
|
||||
flaggedDesc: 'Những người đáng tin đã báo cáo tài khoản này. Đó là cảnh báo để nhìn kỹ hơn, không phải bằng chứng về điều gì.',
|
||||
absenceTitle: 'Không có huy hiệu không phải là ngờ vực',
|
||||
absenceDesc: 'Hầu hết tài khoản không hiển thị gì cả. Điều đó nghĩa là chưa ai trong mạng lưới của bạn bảo chứng cho họ, không phải có gì đó sai. Đừng bao giờ coi dấu thiếu vắng là tiêu cực.',
|
||||
sourceTitle: 'Ai tính toán nó',
|
||||
sourceDesc: 'Theo mặc định, chúng tôi dùng mạng lưới của chính bạn. Bạn cũng có thể chọn một nhà cung cấp tin cậy công bố điểm số đã ký qua Nostr (NIP-85), hoặc tắt hiển thị. Bị gắn cờ luôn hiển thị, vì đó là tín hiệu an toàn.',
|
||||
endorsementTitle: 'Hiện diện không phải là bảo chứng',
|
||||
endorsementDesc: 'Dấu đã xác minh nghĩa là ai đó đã bảo chứng, không phải người đó tốt. Cờ nghĩa là người đáng tin đã báo cáo họ, không phải họ có tội. Kiểm tra chi tiết trước khi bạn quyết định.',
|
||||
povTitle: 'Tùy thuộc vào điểm nhìn',
|
||||
povDesc: 'Điểm số là tương đối với người đang nhìn. Xếp hạng từ một nhà cung cấp hay một người không thể so sánh với người khác, và chúng tôi không bao giờ trình bày nó như một sự thật khách quan.',
|
||||
settingsCta: 'Quản lý trong Cài đặt',
|
||||
},
|
||||
marketTerms: {
|
||||
link: 'Hướng dẫn chợ',
|
||||
seoTitle: 'Hướng dẫn chợ',
|
||||
seoDescription: 'Cách tin đăng đồ trượt ván của SkateSpots hoạt động: ngang hàng, người mua cẩn trọng, và các quy tắc.',
|
||||
title: 'Hướng dẫn chợ',
|
||||
intro: 'SkateSpots là bảng đồ trượt ván ngang hàng. Bạn giao dịch trực tiếp với người kia: chúng tôi không giữ tiền, vận chuyển hàng, hay giải quyết tranh chấp.',
|
||||
howTitle: 'Cách hoạt động',
|
||||
howBody: 'Đăng đồ, liên hệ người bán qua tin nhắn riêng, và thanh toán trực tiếp (tiền mặt, Lightning, hoặc trao đổi). Không có giỏ hàng hay thanh toán.',
|
||||
rulesTitle: 'Những gì không được phép',
|
||||
rulesBody: 'Không nội dung bất hợp pháp, nguy hiểm, hoặc người lớn; không ma túy, vũ khí, hàng giả hoặc hàng ăn cắp. Giữ tin đăng liên quan đến đồ trượt ván và các món liên quan.',
|
||||
respectTitle: 'Hãy tôn trọng',
|
||||
respectBody: 'Không lạm dụng, quấy rối, đe dọa, hoặc thù hận. Kiểm duyệt viên có thể ẩn tin đăng hoặc tài khoản.',
|
||||
trustTitle: 'Tin cậy là chỉ dẫn, không phải bảo đảm',
|
||||
trustBody: 'Dấu xác minh và uy tín giao dịch là tín hiệu từ mạng lưới, không phải lời hứa. Hãy tự kiểm tra trước khi giao dịch.',
|
||||
trustLink: 'Cách tin cậy hoạt động',
|
||||
privacyLink: 'Điều gì rời khỏi thiết bị của bạn',
|
||||
safetyTitle: 'Giao dịch an toàn',
|
||||
safetyBody: 'Gặp ở nơi công cộng để trao hàng, dùng escrow hoặc tiền đặt cọc thiện chí cho giao dịch gửi hàng, và đừng bao giờ gửi tiền ngoài ứng dụng.',
|
||||
moderationTitle: 'Kiểm duyệt nhẹ nhàng và có thể hoàn tác',
|
||||
moderationBody: 'Nội dung bị ẩn vẫn nằm trên các relay và có thể khôi phục; tranh chấp giữa mọi người là do bạn giải quyết.',
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: 'Áo thun',
|
||||
hoodies: 'Áo hoodie & Áo nỉ',
|
||||
pants: 'Quần dài & Quần short',
|
||||
jackets: 'Áo khoác & Áo ngoài',
|
||||
kits: 'Đồng phục đội & Áo đấu',
|
||||
caps: 'Mũ lưỡi trai & Mũ len',
|
||||
socks: 'Tất',
|
||||
accessories: 'Túi & Phụ kiện',
|
||||
footwear: 'Giày dép',
|
||||
patches: 'Miếng vá & Đắp nổi',
|
||||
griptape: 'Nghệ thuật griptape & Trang phục deck',
|
||||
onepiece: 'Độc bản / Tái chế',
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: 'Áo thun và áo tùy chỉnh',
|
||||
hoodies: 'Áo hoodie, áo nỉ và quần nỉ',
|
||||
pants: 'Quần lao động, quần cargo và quần short',
|
||||
jackets: 'Áo coach, áo khoác ngoài và áo lao động',
|
||||
kits: 'Đồng phục đội, áo đấu và đồng phục',
|
||||
caps: 'Mũ lưỡi trai, mũ len và đồ đội đầu',
|
||||
socks: 'Tất crew và đồ dệt kim',
|
||||
accessories: 'Túi, thắt lưng và đồ nhỏ',
|
||||
footwear: 'Giày tùy chỉnh và giày dép',
|
||||
patches: 'Miếng vá thêu và đắp nổi',
|
||||
griptape: 'Nghệ thuật griptape và trang phục deck',
|
||||
onepiece: 'Mảnh đơn và trang phục tái chế',
|
||||
},
|
||||
method: {
|
||||
screenprint: 'In lụa',
|
||||
dtg: 'DTG / In trực tiếp lên vải',
|
||||
embroidery: 'Thêu',
|
||||
cutsew: 'Cắt & May',
|
||||
sublimation: 'In thăng hoa',
|
||||
heattransfer: 'Chuyển nhiệt / Vinyl',
|
||||
garmentdye: 'Nhuộm áo',
|
||||
knit: 'Đồ dệt kim',
|
||||
patchwork: 'Ghép vải',
|
||||
allover: 'In toàn bộ',
|
||||
},
|
||||
material: {
|
||||
cotton: 'Cotton',
|
||||
heavyweight: 'Vải nặng',
|
||||
organic: 'Hữu cơ / Bền vững',
|
||||
fleece: 'Vải lông cừu',
|
||||
denim: 'Denim',
|
||||
canvas: 'Vải canvas',
|
||||
nylon: 'Nylon / Kỹ thuật',
|
||||
wool: 'Merino / Len',
|
||||
leather: 'Da',
|
||||
recycled: 'Tái chế / Tồn kho',
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: 'Trở thành Nhà thiết kế Quần áo - SkateSpots',
|
||||
seoDescription: 'Quần áo tùy chỉnh, đồng phục đội & trang phục cho cộng đồng.',
|
||||
heading: 'Nhà thiết kế Quần áo',
|
||||
tagline: 'Quần áo tùy chỉnh, đồng phục đội & trang phục cho cộng đồng',
|
||||
noun: 'nhà thiết kế quần áo',
|
||||
rateLabel: 'Mức giá',
|
||||
portfolioLabel: 'Liên kết cửa hàng / hồ sơ',
|
||||
sectionWhatYouMake: 'Bạn tạo ra gì',
|
||||
sectionHowYouMake: 'Bạn làm thế nào',
|
||||
sectionMaterials: 'Chất liệu',
|
||||
minimumPlaceholder: 'ví dụ: 10 món',
|
||||
turnaroundPlaceholder: 'ví dụ: 2-3 tuần',
|
||||
sizingPlaceholder: 'ví dụ: XS-3XL / may đo',
|
||||
samplesHelper: 'Bạn có cung cấp mẫu thử hoặc nguyên mẫu trước khi sản xuất hàng loạt không?',
|
||||
customizationPlaceholder: 'ví dụ: tên, số, hình',
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: 'Đã cập nhật',
|
||||
refresh: 'Làm mới',
|
||||
unavailable: 'Thời tiết không khả dụng.',
|
||||
retry: 'Thử lại',
|
||||
sunrise: 'Bình minh',
|
||||
sunset: 'Hoàng hôn',
|
||||
legendTitle: 'Điểm thời tiết',
|
||||
legendWeatherOnly: 'Chỉ thời tiết',
|
||||
},
|
||||
cordnUi: {
|
||||
title: 'Chat riêng tư',
|
||||
subtitle: 'Mã hóa đầu-cuối (MLS) giữa các thành viên crew. Điều phối viên chỉ định tuyến bản mã và metadata — không bao giờ thấy nội dung tin nhắn.',
|
||||
notLoggedIn: 'Đăng nhập để dùng chat riêng tư của crew.',
|
||||
membersOnly: 'Chỉ thành viên crew mới mở được chat riêng tư.',
|
||||
connecting: 'Đang kết nối…',
|
||||
noCoordinator: 'Chưa có điều phối viên nào được cấu hình cho crew này.',
|
||||
noGroupAdmin: 'Chat riêng tư của crew này chưa được tạo.',
|
||||
noGroupMember: 'Bạn chưa ở trong chat riêng tư của crew này.',
|
||||
create: 'Tạo chat riêng tư',
|
||||
requestJoin: 'Xin tham gia',
|
||||
checkInvite: 'Kiểm tra lời mời',
|
||||
requested: 'Đã gửi yêu cầu — quản trị viên crew sẽ duyệt.',
|
||||
noInvite: 'Chưa có lời mời nào. Hãy nhờ quản trị viên duyệt yêu cầu của bạn.',
|
||||
placeholder: 'Nhắn cho crew…',
|
||||
send: 'Gửi',
|
||||
refresh: 'Làm mới',
|
||||
requests: 'Yêu cầu tham gia',
|
||||
checkRequests: 'Kiểm tra yêu cầu',
|
||||
approve: 'Thêm',
|
||||
noRequests: 'Không có yêu cầu tham gia đang chờ.',
|
||||
inviteHint: 'Mới chỉ có bạn trong chat này — thành viên crew có thể nhấn “Xin tham gia”, rồi bạn duyệt họ ở đây.',
|
||||
memberCount: '{{count}} trong nhóm',
|
||||
you: 'Bạn',
|
||||
groupRef: 'Liên kết nhóm',
|
||||
copyRef: 'Sao chép',
|
||||
copied: 'Đã sao chép',
|
||||
attachImage: 'Đính kèm ảnh',
|
||||
uploading: 'Đang tải lên…',
|
||||
uploadFailed: 'Không thể tải ảnh lên.',
|
||||
bannerTitle: 'Crew này chưa có chat riêng tư',
|
||||
bannerBody: 'Thiết lập chat mã hóa đầu-cuối (MLS) cho crew của bạn — thành viên tham gia từ tab.',
|
||||
bannerCta: 'Thiết lập',
|
||||
ready: 'Đã kết nối · MLS',
|
||||
errorPrefix: 'Không thể kết nối tới điều phối viên',
|
||||
interactiveHint: 'Trình ký của bạn yêu cầu phê duyệt mỗi hành động — dùng Làm mới và Gửi khi cần.',
|
||||
},
|
||||
};
|
||||
|
||||
export default driftStrings;
|
||||
|
|
@ -6,8 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
const vi = {
|
||||
const vi = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -16,6 +19,8 @@ const vi = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default vi;
|
||||
|
|
|
|||
331
src/i18n/zh-CN/drift.ts
Normal file
331
src/i18n/zh-CN/drift.ts
Normal file
|
|
@ -0,0 +1,331 @@
|
|||
/**
|
||||
* Simplified Chinese (简体中文) — drift fragment: the keys added after the main batches.
|
||||
*
|
||||
* These were the last keys missing from this locale (nav search, the first-run
|
||||
* checklist, marketplace states/escrow copy, the clothing craft, the trust UI,
|
||||
* the marketplace guidelines, the weather legend and the native Cordn/MLS chat).
|
||||
* The default export is the nested dictionary; `index.ts` deep-merges it over
|
||||
* the composed batch fragments (a shallow spread would replace a whole namespace
|
||||
* and drop its sibling keys).
|
||||
*
|
||||
* Skate/brand vocabulary stays English or transliterated (Spot, Park, Crew,
|
||||
* Stash, The Lab, Nostr, Lightning, sats, Cashu, MLS, Cordn, Staircase), matching
|
||||
* the other batches.
|
||||
*/
|
||||
type Dict = { [key: string]: string | Dict };
|
||||
|
||||
const drift: Dict = {
|
||||
nav: {
|
||||
searchLanguages: '搜索语言…',
|
||||
noLanguages: '未找到语言',
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: '地点',
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: '开始使用',
|
||||
firstRunAddSpot: '添加你的第一个滑板点',
|
||||
firstRunJoinCrew: '加入一个 Crew',
|
||||
firstRunStartCrew: '创建你的 Crew',
|
||||
firstRunWallet: '设置你的钱包',
|
||||
forecastDays: '{{count}} 天预报',
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: '{{count}} 天预报',
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: '已撤销',
|
||||
stateVerifying: '验证中',
|
||||
},
|
||||
loadFailed: '无法连接中继。请检查你的网络连接并重试。',
|
||||
statusPending: '待处理',
|
||||
offers: {
|
||||
closeDeal: '完成交易',
|
||||
loadFailed: '无法加载报价。请检查你的网络连接并重试。',
|
||||
},
|
||||
pay: {
|
||||
nonSats: '此报价以 {{currency}} 计价。应用内支付仅支持 sats。请直接与卖家结算。',
|
||||
unsupported: '此支付码(Cashu 请求)尚不支持。请向卖家索要 Lightning 发票或地址。',
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: '资金已锁定在托管中并保存在此设备上,但请求未发送。重新打开该商品重试。请勿再次支付。',
|
||||
mintLabel: 'Mint(资金锁定处)',
|
||||
sellerMintHint: '卖家偏好此 Mint;锁在这里的资金对他们最易领取。',
|
||||
mintHint: '托管存放在此 Mint。卖家在此领取,因此请选择双方都信任的一个。',
|
||||
noMints: '没有可用的 Mint',
|
||||
p2pkUnsupported: '此 Mint 未声明支持 P2PK(NUT-11),因此无法在此锁定托管。请选择其他 Mint。',
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: '提供服装',
|
||||
tabClothing: '服装',
|
||||
empty: {
|
||||
clothingTitle: '还没有服装设计师',
|
||||
clothingBody: '成为第一个为这个圈子提供定制服装、团队套装和服饰的人。',
|
||||
},
|
||||
craftFields: {
|
||||
sizing: '尺码范围',
|
||||
samples: '样品 / 打样',
|
||||
customization: '定制',
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: 'SkateSpots 协调器',
|
||||
ourDefaultDesc: 'SkateSpots 在 relay.skate-spots.org 运行一个协调器。默认使用它,或运行你自己的——协调器只能看到密文和元数据,永远看不到你的消息。',
|
||||
useOurs: '使用 SkateSpots 协调器',
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: '加密聊天',
|
||||
privateChatName: '私密聊天',
|
||||
privateChatDesc: '通过协调器的前向保密群聊(MLS)。',
|
||||
privateChatDescFull: '私密聊天由管理员创建一次,然后成员加入。',
|
||||
chatRowDesc: 'Crew 中的每个人——封存到每位成员的密钥(NIP-17)。',
|
||||
openChat: '打开',
|
||||
setUpChat: '设置',
|
||||
joinChat: '加入',
|
||||
checking: '检查中…',
|
||||
openInAnotherApp: '在其他应用中打开',
|
||||
openInCordnWeb: 'Cordn(网页)',
|
||||
openCordnGroup: '打开 Crew 聊天',
|
||||
copyForStaircase: '复制给 Staircase',
|
||||
},
|
||||
dms: {
|
||||
refresh: '刷新',
|
||||
crews: 'Crew',
|
||||
crewFounder: '创始人',
|
||||
crewMember: '成员',
|
||||
crewOpen: '打开',
|
||||
crewSetUp: '设置',
|
||||
},
|
||||
form: {
|
||||
cordnGroup: 'Cordn 群组',
|
||||
cordnGroupHint: '可选:粘贴来自 Staircase 或 Cordn 网页的群组链接。你的 Crew 随后将获得真正的端到端 MLS 聊天,托管在我们的协调器上。',
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: '信任',
|
||||
trustSub: '来源与显示',
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: '屏蔽',
|
||||
muted: '已屏蔽',
|
||||
mutedDesc: '你将不会看到他们的内容。',
|
||||
muteFailed: '无法屏蔽。请重试。',
|
||||
loginToMute: '登录以屏蔽。',
|
||||
attributedNetwork: '来自你网络中的人',
|
||||
attributedProviderHouse: '来自社区信任提供方',
|
||||
attributedProviderCustom: '来自你选择的提供方',
|
||||
howItWorks: '信任如何运作',
|
||||
flaggedNoticeTitle: '被可信滑手举报',
|
||||
flaggedNoticeDesc: '请小心。网络中的可信人员举报了此账号。',
|
||||
flaggedReporterFollow: '你关注的 {{count}} 人',
|
||||
flaggedReporterNetwork: '你网络中的 {{count}} 人',
|
||||
flaggedReporterOther: '其他 {{count}} 个账号',
|
||||
flaggedReport: '举报',
|
||||
flaggedDismiss: '忽略',
|
||||
bucketVerified: '已验证',
|
||||
bucketUnknown: '未知',
|
||||
bucketFlagged: '已标记',
|
||||
bucketVerifiedDesc: '你网络中的某人为此账号担保。',
|
||||
bucketUnknownDesc: '你网络中还没有人为这个账号担保。',
|
||||
bucketFlaggedDesc: '可信人员举报了此账号。',
|
||||
reportedByTrusted: '被 {{count}} 位可信人员举报',
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: '网络警报',
|
||||
alertsDesc: '你关注的、被可信人员举报或屏蔽的账号。',
|
||||
alertsEmpty: '没有警报。我们会检查你关注的账号是否有可信举报。',
|
||||
alertsReported: '被 {{count}} 位可信人员举报',
|
||||
alertsMuted: '被 {{count}} 位可信人员屏蔽',
|
||||
alertsIgnore: '忽略',
|
||||
alertsUnfollow: '取消关注',
|
||||
alertsLogin: '登录以查看你关注账号的警报。',
|
||||
providerTitle: '提供方',
|
||||
providerDesc: '分数来自你选择的提供方。社区提供方是默认值。',
|
||||
useCommunity: '使用社区提供方',
|
||||
setProvider: '设置提供方',
|
||||
customPubkeyPlaceholder: '提供方 npub 或十六进制 pubkey',
|
||||
customRelayPlaceholder: 'wss://relay.example.com',
|
||||
invalidProvider: '请输入有效的 npub 或 64 位十六进制 pubkey,以及一个 wss:// 中继。',
|
||||
publishFailed: '无法发布提供方。请重试。',
|
||||
providerSaved: '提供方已更新。',
|
||||
loggedOutProvider: '登录以选择提供方。',
|
||||
showMarks: '显示信任标记',
|
||||
showMarksDesc: '已验证和未知标记。举报始终显示。',
|
||||
sourceLabel: '来源',
|
||||
sourceHouse: '社区信任提供方',
|
||||
sourceCustom: '你的提供方',
|
||||
loggedOut: '登录以选择你自己的信任提供方。',
|
||||
seoTitle: '信任如何运作',
|
||||
seoDescription: 'SkateSpots 如何显示信任:三种状态、分数从何而来,以及为什么缺席不是不信任。',
|
||||
title: '信任如何运作',
|
||||
intro: '这里的信任是一种信号,不是判决。它来自你认识的人,或来自你选择的提供方。我们不会在全球范围内给人排名。',
|
||||
statesTitle: '三种状态',
|
||||
verifiedTitle: '已验证',
|
||||
verifiedDesc: '你网络中的某人为这个账号担保:朋友的朋友,或你选择的提供方。',
|
||||
unknownTitle: '未知',
|
||||
unknownDesc: '还没有人担保。每个新账号都从这里开始。',
|
||||
flaggedTitle: '已标记',
|
||||
flaggedDesc: '可信人员举报了这个账号。这是提醒你仔细查看的警告,不是任何事情的证据。',
|
||||
absenceTitle: '没有徽章不代表不信任',
|
||||
absenceDesc: '大多数账号什么都不显示。这意味着你网络中还没有人为他们担保,而不是出了问题。绝不要把缺失的标记理解为负面。',
|
||||
sourceTitle: '谁来计算',
|
||||
sourceDesc: '默认情况下我们使用你自己的网络。你也可以选择一个通过 Nostr(NIP-85)发布签名分数的信任提供方,或关闭显示。已标记始终显示,因为它是安全信号。',
|
||||
endorsementTitle: '存在不等于背书',
|
||||
endorsementDesc: '已验证标记意味着有人担保,并不意味着这个人是好人。标记意味着可信人员举报了他们,并不意味着他们有罪。决定前请查看详情。',
|
||||
povTitle: '这取决于视角',
|
||||
povDesc: '分数是相对于观察者的。来自一个提供方或一个人的排名无法与另一个相比,我们也绝不把它当作客观事实来呈现。',
|
||||
settingsCta: '在设置中管理',
|
||||
},
|
||||
marketTerms: {
|
||||
link: '市场准则',
|
||||
seoTitle: '市场准则',
|
||||
seoDescription: 'SkateSpots 装备刊登如何运作:点对点、买家自负,以及规则。',
|
||||
title: '市场准则',
|
||||
intro: 'SkateSpots 是一个点对点的装备板。你直接与对方交易:我们不保管资金、不发货、也不处理纠纷。',
|
||||
howTitle: '如何运作',
|
||||
howBody: '刊登装备,通过私信联系卖家,然后直接结算(现金、Lightning 或换物)。没有购物车或结账。',
|
||||
rulesTitle: '不允许的内容',
|
||||
rulesBody: '禁止非法、危险或成人内容;禁止毒品、武器、假货或赃物。刊登内容请保持在滑板装备及相关物品上。',
|
||||
respectTitle: '保持尊重',
|
||||
respectBody: '禁止辱骂、骚扰、威胁或仇恨。版主可以隐藏刊登或账号。',
|
||||
trustTitle: '信任是参考,不是保证',
|
||||
trustBody: '验证标记和交易信誉是来自网络的信号,不是承诺。交易前请自行核查。',
|
||||
trustLink: '信任如何运作',
|
||||
privacyLink: '什么会离开你的设备',
|
||||
safetyTitle: '安全交易',
|
||||
safetyBody: '当面交接请约在公共场所,邮寄交易请使用托管或诚意定金,绝不要在应用外转账。',
|
||||
moderationTitle: '管理是温和且可逆的',
|
||||
moderationBody: '被隐藏的内容仍留在中继上,可以恢复;人与人之间的纠纷由你们自己解决。',
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: 'T 恤',
|
||||
hoodies: '连帽衫 & 卫衣',
|
||||
pants: '长裤 & 短裤',
|
||||
jackets: '夹克 & 外套',
|
||||
kits: '队服 & 球衣',
|
||||
caps: '帽子 & 毛线帽',
|
||||
socks: '袜子',
|
||||
accessories: '包袋 & 配饰',
|
||||
footwear: '鞋类 & 鞋子',
|
||||
patches: '布贴 & 贴花',
|
||||
griptape: '砂纸 & 板面服饰',
|
||||
onepiece: '独一无二 / 升级再造',
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: '定制 T 恤和上衣',
|
||||
hoodies: '连帽衫、圆领衫和运动裤',
|
||||
pants: '工装裤、工装短裤和短裤',
|
||||
jackets: '教练夹克、防风外套和工作夹克',
|
||||
kits: '队服、球衣和制服',
|
||||
caps: '帽子、毛线帽和头饰',
|
||||
socks: '中筒袜和针织品',
|
||||
accessories: '包袋、腰带和小物',
|
||||
footwear: '定制鞋和鞋类',
|
||||
patches: '刺绣布贴和贴花',
|
||||
griptape: '砂纸艺术和板面服饰',
|
||||
onepiece: '单件和升级再造服装',
|
||||
},
|
||||
method: {
|
||||
screenprint: '丝网印刷',
|
||||
dtg: 'DTG / 数码直喷',
|
||||
embroidery: '刺绣',
|
||||
cutsew: '裁剪缝制',
|
||||
sublimation: '热升华',
|
||||
heattransfer: '热转印 / 烫画',
|
||||
garmentdye: '成衣染色',
|
||||
knit: '针织',
|
||||
patchwork: '拼布',
|
||||
allover: '满版印花',
|
||||
},
|
||||
material: {
|
||||
cotton: '棉',
|
||||
heavyweight: '重磅',
|
||||
organic: '有机 / 可持续',
|
||||
fleece: '抓绒',
|
||||
denim: '牛仔',
|
||||
canvas: '帆布',
|
||||
nylon: '尼龙 / 功能性',
|
||||
wool: '美利奴 / 羊毛',
|
||||
leather: '皮革',
|
||||
recycled: '再生 / 库存布',
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: '成为服装设计师 - SkateSpots',
|
||||
seoDescription: '为这个圈子提供定制服装、团队套装和服饰。',
|
||||
heading: '服装设计师',
|
||||
tagline: '为这个圈子提供定制服装、团队套装和服饰',
|
||||
noun: '服装设计师',
|
||||
rateLabel: '费率',
|
||||
portfolioLabel: '店铺 / 作品集链接',
|
||||
sectionWhatYouMake: '你做什么',
|
||||
sectionHowYouMake: '你怎么做',
|
||||
sectionMaterials: '材料',
|
||||
minimumPlaceholder: '例如 10 件',
|
||||
turnaroundPlaceholder: '例如 2-3 周',
|
||||
sizingPlaceholder: '例如 XS-3XL / 量身定制',
|
||||
samplesHelper: '在正式生产前你提供样品或打样吗?',
|
||||
customizationPlaceholder: '例如名字、号码、图案',
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: '已更新',
|
||||
refresh: '刷新',
|
||||
unavailable: '天气不可用。',
|
||||
retry: '重试',
|
||||
sunrise: '日出',
|
||||
sunset: '日落',
|
||||
legendTitle: '天气评分',
|
||||
legendWeatherOnly: '仅天气',
|
||||
},
|
||||
cordnUi: {
|
||||
title: '私密聊天',
|
||||
subtitle: 'Crew 成员之间的端到端加密(MLS)。协调器只路由密文和元数据——它永远看不到消息内容。',
|
||||
notLoggedIn: '登录以使用 Crew 的私密聊天。',
|
||||
membersOnly: '只有 Crew 成员才能打开私密聊天。',
|
||||
connecting: '连接中…',
|
||||
noCoordinator: '此 Crew 尚未配置协调器。',
|
||||
noGroupAdmin: '此 Crew 的私密聊天尚未创建。',
|
||||
noGroupMember: '你还没有加入此 Crew 的私密聊天。',
|
||||
create: '创建私密聊天',
|
||||
requestJoin: '请求加入',
|
||||
checkInvite: '检查邀请',
|
||||
requested: '请求已发送——Crew 管理员会批准。',
|
||||
noInvite: '还没有等待中的邀请。请管理员批准你的请求。',
|
||||
placeholder: '给 Crew 发消息…',
|
||||
send: '发送',
|
||||
refresh: '刷新',
|
||||
requests: '加入请求',
|
||||
checkRequests: '检查请求',
|
||||
approve: '添加',
|
||||
noRequests: '没有待处理的加入请求。',
|
||||
inviteHint: '目前只有你在这个聊天中——Crew 成员可以点击“请求加入”,然后你在这里批准他们。',
|
||||
memberCount: '群组中有 {{count}} 人',
|
||||
you: '你',
|
||||
groupRef: '群组链接',
|
||||
copyRef: '复制',
|
||||
copied: '已复制',
|
||||
attachImage: '附加图片',
|
||||
uploading: '上传中…',
|
||||
uploadFailed: '无法上传图片。',
|
||||
bannerTitle: '此 Crew 还没有私密聊天',
|
||||
bannerBody: '为你的 Crew 设置端到端加密(MLS)聊天——成员从标签页加入。',
|
||||
bannerCta: '设置',
|
||||
ready: '已连接 · MLS',
|
||||
errorPrefix: '无法连接协调器',
|
||||
interactiveHint: '你的签名器会为每个操作请求批准——按需使用刷新和发送。',
|
||||
},
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,8 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
const zhCN = {
|
||||
const zhCN = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -16,6 +19,8 @@ const zhCN = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default zhCN;
|
||||
|
|
|
|||
331
src/i18n/zh-TW/drift.ts
Normal file
331
src/i18n/zh-TW/drift.ts
Normal file
|
|
@ -0,0 +1,331 @@
|
|||
/**
|
||||
* Traditional Chinese (繁體中文) — drift fragment: the keys added after the main batches.
|
||||
*
|
||||
* These were the last keys missing from this locale (nav search, the first-run
|
||||
* checklist, marketplace states/escrow copy, the clothing craft, the trust UI,
|
||||
* the marketplace guidelines, the weather legend and the native Cordn/MLS chat).
|
||||
* The default export is the nested dictionary; `index.ts` deep-merges it over
|
||||
* the composed batch fragments (a shallow spread would replace a whole namespace
|
||||
* and drop its sibling keys).
|
||||
*
|
||||
* Skate/brand vocabulary stays English or transliterated (Spot, Park, Crew,
|
||||
* Stash, The Lab, Nostr, Lightning, sats, Cashu, MLS, Cordn, Staircase), matching
|
||||
* the other batches.
|
||||
*/
|
||||
type Dict = { [key: string]: string | Dict };
|
||||
|
||||
const drift: Dict = {
|
||||
nav: {
|
||||
searchLanguages: '搜尋語言…',
|
||||
noLanguages: '找不到語言',
|
||||
},
|
||||
mapPage: {
|
||||
searchSuggestPlaces: '地點',
|
||||
},
|
||||
mapUi: {
|
||||
firstRunTitle: '開始使用',
|
||||
firstRunAddSpot: '新增你的第一個滑板點',
|
||||
firstRunJoinCrew: '加入一個 Crew',
|
||||
firstRunStartCrew: '建立你的 Crew',
|
||||
firstRunWallet: '設定你的錢包',
|
||||
forecastDays: '{{count}} 天天氣預報',
|
||||
},
|
||||
spotUi: {
|
||||
forecastDays: '{{count}} 天天氣預報',
|
||||
},
|
||||
marketUi: {
|
||||
trades: {
|
||||
stateRevoked: '已撤銷',
|
||||
stateVerifying: '驗證中',
|
||||
},
|
||||
loadFailed: '無法連線中繼。請檢查你的網路連線並重試。',
|
||||
statusPending: '待處理',
|
||||
offers: {
|
||||
closeDeal: '完成交易',
|
||||
loadFailed: '無法載入報價。請檢查你的網路連線並重試。',
|
||||
},
|
||||
pay: {
|
||||
nonSats: '此報價以 {{currency}} 計價。應用程式內付款僅支援 sats。請直接與賣家結算。',
|
||||
unsupported: '此付款碼(Cashu 請求)尚不支援。請向賣家索取 Lightning 發票或地址。',
|
||||
},
|
||||
escrowRequest: {
|
||||
lockedNotSent: '資金已鎖定在託管中並儲存在此裝置上,但請求未送出。重新開啟該商品以重試。請勿再次付款。',
|
||||
mintLabel: 'Mint(資金鎖定處)',
|
||||
sellerMintHint: '賣家偏好此 Mint;鎖在這裡的資金對他們最易領取。',
|
||||
mintHint: '託管存放在此 Mint。賣家在此領取,因此請選擇雙方都信任的一個。',
|
||||
noMints: '沒有可用的 Mint',
|
||||
p2pkUnsupported: '此 Mint 未宣告支援 P2PK(NUT-11),因此無法在此鎖定託管。請選擇其他 Mint。',
|
||||
},
|
||||
},
|
||||
labUi: {
|
||||
offerClothing: '提供服飾',
|
||||
tabClothing: '服飾',
|
||||
empty: {
|
||||
clothingTitle: '還沒有服飾設計師',
|
||||
clothingBody: '成為第一個為這個圈子提供訂製服飾、團隊套裝和服裝的人。',
|
||||
},
|
||||
craftFields: {
|
||||
sizing: '尺寸範圍',
|
||||
samples: '樣品 / 打樣',
|
||||
customization: '客製化',
|
||||
},
|
||||
},
|
||||
socialUi: {
|
||||
coordinator: {
|
||||
ourDefaultTitle: 'SkateSpots 協調器',
|
||||
ourDefaultDesc: 'SkateSpots 在 relay.skate-spots.org 運行一個協調器。預設使用它,或運行你自己的——協調器只能看到密文和中繼資料,永遠看不到你的訊息。',
|
||||
useOurs: '使用 SkateSpots 協調器',
|
||||
},
|
||||
crewCoordinator: {
|
||||
encryptedChat: '加密聊天',
|
||||
privateChatName: '私密聊天',
|
||||
privateChatDesc: '透過協調器的前向保密群組聊天(MLS)。',
|
||||
privateChatDescFull: '私密聊天由管理員建立一次,然後成員加入。',
|
||||
chatRowDesc: 'Crew 中的每個人——封存到每位成員的金鑰(NIP-17)。',
|
||||
openChat: '開啟',
|
||||
setUpChat: '設定',
|
||||
joinChat: '加入',
|
||||
checking: '檢查中…',
|
||||
openInAnotherApp: '在其他應用程式中開啟',
|
||||
openInCordnWeb: 'Cordn(網頁)',
|
||||
openCordnGroup: '開啟 Crew 聊天',
|
||||
copyForStaircase: '複製給 Staircase',
|
||||
},
|
||||
dms: {
|
||||
refresh: '重新整理',
|
||||
crews: 'Crew',
|
||||
crewFounder: '創始人',
|
||||
crewMember: '成員',
|
||||
crewOpen: '開啟',
|
||||
crewSetUp: '設定',
|
||||
},
|
||||
form: {
|
||||
cordnGroup: 'Cordn 群組',
|
||||
cordnGroupHint: '選填:貼上來自 Staircase 或 Cordn 網頁的群組連結。你的 Crew 隨後將獲得真正的端到端 MLS 聊天,託管在我們的協調器上。',
|
||||
},
|
||||
},
|
||||
settingsUi: {
|
||||
settingsPage: {
|
||||
trust: '信任',
|
||||
trustSub: '來源與顯示',
|
||||
},
|
||||
},
|
||||
walletUi: {
|
||||
trust: {
|
||||
mute: '靜音',
|
||||
muted: '已靜音',
|
||||
mutedDesc: '你不會看到他們的內容。',
|
||||
muteFailed: '無法靜音。請重試。',
|
||||
loginToMute: '登入以靜音。',
|
||||
attributedNetwork: '來自你網路中的人',
|
||||
attributedProviderHouse: '來自社群信任提供者',
|
||||
attributedProviderCustom: '來自你選擇的提供者',
|
||||
howItWorks: '信任如何運作',
|
||||
flaggedNoticeTitle: '被可信滑手檢舉',
|
||||
flaggedNoticeDesc: '請小心。網路中的可信人員檢舉了此帳號。',
|
||||
flaggedReporterFollow: '你追蹤的 {{count}} 人',
|
||||
flaggedReporterNetwork: '你網路中的 {{count}} 人',
|
||||
flaggedReporterOther: '其他 {{count}} 個帳號',
|
||||
flaggedReport: '檢舉',
|
||||
flaggedDismiss: '忽略',
|
||||
bucketVerified: '已驗證',
|
||||
bucketUnknown: '未知',
|
||||
bucketFlagged: '已標記',
|
||||
bucketVerifiedDesc: '你網路中的某人為此帳號背書。',
|
||||
bucketUnknownDesc: '你網路中還沒有人為這個帳號背書。',
|
||||
bucketFlaggedDesc: '可信人員檢舉了此帳號。',
|
||||
reportedByTrusted: '被 {{count}} 位可信人員檢舉',
|
||||
},
|
||||
},
|
||||
trustUi: {
|
||||
alertsTitle: '網路警示',
|
||||
alertsDesc: '你追蹤的、被可信人員檢舉或靜音的帳號。',
|
||||
alertsEmpty: '沒有警示。我們會檢查你追蹤的帳號是否有可信檢舉。',
|
||||
alertsReported: '被 {{count}} 位可信人員檢舉',
|
||||
alertsMuted: '被 {{count}} 位可信人員靜音',
|
||||
alertsIgnore: '忽略',
|
||||
alertsUnfollow: '取消追蹤',
|
||||
alertsLogin: '登入以查看你追蹤帳號的警示。',
|
||||
providerTitle: '提供者',
|
||||
providerDesc: '分數來自你選擇的提供者。社群提供者是預設值。',
|
||||
useCommunity: '使用社群提供者',
|
||||
setProvider: '設定提供者',
|
||||
customPubkeyPlaceholder: '提供者 npub 或十六進位 pubkey',
|
||||
customRelayPlaceholder: 'wss://relay.example.com',
|
||||
invalidProvider: '請輸入有效的 npub 或 64 位元十六進位 pubkey,以及一個 wss:// 中繼。',
|
||||
publishFailed: '無法發布提供者。請重試。',
|
||||
providerSaved: '提供者已更新。',
|
||||
loggedOutProvider: '登入以選擇提供者。',
|
||||
showMarks: '顯示信任標記',
|
||||
showMarksDesc: '已驗證和未知標記。檢舉一律顯示。',
|
||||
sourceLabel: '來源',
|
||||
sourceHouse: '社群信任提供者',
|
||||
sourceCustom: '你的提供者',
|
||||
loggedOut: '登入以選擇你自己的信任提供者。',
|
||||
seoTitle: '信任如何運作',
|
||||
seoDescription: 'SkateSpots 如何顯示信任:三種狀態、分數從何而來,以及為什麼缺席不是不信任。',
|
||||
title: '信任如何運作',
|
||||
intro: '這裡的信任是一種訊號,不是判決。它來自你認識的人,或來自你選擇的提供者。我們不會在全球範圍內給人排名。',
|
||||
statesTitle: '三種狀態',
|
||||
verifiedTitle: '已驗證',
|
||||
verifiedDesc: '你網路中的某人為這個帳號背書:朋友的朋友,或你選擇的提供者。',
|
||||
unknownTitle: '未知',
|
||||
unknownDesc: '還沒有人背書。每個新帳號都從這裡開始。',
|
||||
flaggedTitle: '已標記',
|
||||
flaggedDesc: '可信人員檢舉了這個帳號。這是提醒你仔細查看的警告,不是任何事情的證據。',
|
||||
absenceTitle: '沒有徽章不代表不信任',
|
||||
absenceDesc: '大多數帳號什麼都不顯示。這意味著你網路中還沒有人為他們背書,而不是出了問題。絕不要把缺失的標記理解為負面。',
|
||||
sourceTitle: '誰來計算',
|
||||
sourceDesc: '預設情況下我們使用你自己的網路。你也可以選擇一個透過 Nostr(NIP-85)發布簽章分數的信任提供者,或關閉顯示。已標記一律顯示,因為它是安全訊號。',
|
||||
endorsementTitle: '存在不等於背書',
|
||||
endorsementDesc: '已驗證標記意味著有人背書,並不意味著這個人是好人。標記意味著可信人員檢舉了他們,並不意味著他們有罪。決定前請查看詳情。',
|
||||
povTitle: '這取決於視角',
|
||||
povDesc: '分數是相對於觀察者的。來自一個提供者或一個人的排名無法與另一個相比,我們也絕不把它當作客觀事實來呈現。',
|
||||
settingsCta: '在設定中管理',
|
||||
},
|
||||
marketTerms: {
|
||||
link: '市場準則',
|
||||
seoTitle: '市場準則',
|
||||
seoDescription: 'SkateSpots 裝備刊登如何運作:點對點、買家自負,以及規則。',
|
||||
title: '市場準則',
|
||||
intro: 'SkateSpots 是一個點對點的裝備看板。你直接與對方交易:我們不保管資金、不寄送物品,也不處理糾紛。',
|
||||
howTitle: '如何運作',
|
||||
howBody: '刊登裝備,透過私訊聯絡賣家,然後直接結算(現金、Lightning 或換物)。沒有購物車或結帳。',
|
||||
rulesTitle: '不允許的內容',
|
||||
rulesBody: '禁止非法、危險或成人內容;禁止毒品、武器、仿冒品或贓物。刊登內容請保持在滑板裝備及相關物品上。',
|
||||
respectTitle: '保持尊重',
|
||||
respectBody: '禁止辱罵、騷擾、威脅或仇恨。版主可以隱藏刊登或帳號。',
|
||||
trustTitle: '信任是參考,不是保證',
|
||||
trustBody: '驗證標記和交易信譽是來自網路的訊號,不是承諾。交易前請自行查核。',
|
||||
trustLink: '信任如何運作',
|
||||
privacyLink: '什麼會離開你的裝置',
|
||||
safetyTitle: '安全交易',
|
||||
safetyBody: '當面交接請約在公共場所,郵寄交易請使用託管或誠意訂金,絕不要在應用程式外轉帳。',
|
||||
moderationTitle: '管理是溫和且可逆的',
|
||||
moderationBody: '被隱藏的內容仍留在中繼上,可以還原;人與人之間的糾紛由你們自己解決。',
|
||||
},
|
||||
labOptions: {
|
||||
clothing: {
|
||||
service: {
|
||||
tees: 'T 恤',
|
||||
hoodies: '連帽衫 & 衛衣',
|
||||
pants: '長褲 & 短褲',
|
||||
jackets: '外套 & 夾克',
|
||||
kits: '隊服 & 球衣',
|
||||
caps: '帽子 & 毛帽',
|
||||
socks: '襪子',
|
||||
accessories: '包袋 & 配件',
|
||||
footwear: '鞋類 & 鞋子',
|
||||
patches: '布章 & 貼花',
|
||||
griptape: '砂紙 & 板身服飾',
|
||||
onepiece: '獨一無二 / 升級再造',
|
||||
},
|
||||
serviceDesc: {
|
||||
tees: '訂製 T 恤和上衣',
|
||||
hoodies: '連帽衫、圓領衫和運動褲',
|
||||
pants: '工作褲、工裝褲和短褲',
|
||||
jackets: '教練外套、防風外套和工作外套',
|
||||
kits: '隊服、球衣和制服',
|
||||
caps: '帽子、毛帽和頭飾',
|
||||
socks: '中筒襪和針織品',
|
||||
accessories: '包袋、腰帶和小物',
|
||||
footwear: '訂製鞋和鞋類',
|
||||
patches: '刺繡布章和貼花',
|
||||
griptape: '砂紙藝術和板身服飾',
|
||||
onepiece: '單件和升級再造服裝',
|
||||
},
|
||||
method: {
|
||||
screenprint: '網版印刷',
|
||||
dtg: 'DTG / 數位直噴',
|
||||
embroidery: '刺繡',
|
||||
cutsew: '裁剪縫製',
|
||||
sublimation: '熱昇華',
|
||||
heattransfer: '熱轉印 / 燙畫',
|
||||
garmentdye: '成衣染色',
|
||||
knit: '針織',
|
||||
patchwork: '拼布',
|
||||
allover: '滿版印花',
|
||||
},
|
||||
material: {
|
||||
cotton: '棉',
|
||||
heavyweight: '重磅',
|
||||
organic: '有機 / 永續',
|
||||
fleece: '刷毛',
|
||||
denim: '牛仔',
|
||||
canvas: '帆布',
|
||||
nylon: '尼龍 / 機能性',
|
||||
wool: '美麗諾 / 羊毛',
|
||||
leather: '皮革',
|
||||
recycled: '再生 / 庫存布',
|
||||
},
|
||||
},
|
||||
},
|
||||
becomeRolesUi: {
|
||||
clothing: {
|
||||
seoTitle: '成為服飾設計師 - SkateSpots',
|
||||
seoDescription: '為這個圈子提供訂製服飾、團隊套裝和服裝。',
|
||||
heading: '服飾設計師',
|
||||
tagline: '為這個圈子提供訂製服飾、團隊套裝和服裝',
|
||||
noun: '服飾設計師',
|
||||
rateLabel: '費率',
|
||||
portfolioLabel: '店鋪 / 作品集連結',
|
||||
sectionWhatYouMake: '你做什麼',
|
||||
sectionHowYouMake: '你怎麼做',
|
||||
sectionMaterials: '材料',
|
||||
minimumPlaceholder: '例如 10 件',
|
||||
turnaroundPlaceholder: '例如 2-3 週',
|
||||
sizingPlaceholder: '例如 XS-3XL / 量身訂製',
|
||||
samplesHelper: '在正式生產前你提供樣品或打樣嗎?',
|
||||
customizationPlaceholder: '例如名字、號碼、圖案',
|
||||
},
|
||||
},
|
||||
weatherUi: {
|
||||
updated: '已更新',
|
||||
refresh: '重新整理',
|
||||
unavailable: '天氣無法使用。',
|
||||
retry: '重試',
|
||||
sunrise: '日出',
|
||||
sunset: '日落',
|
||||
legendTitle: '天氣評分',
|
||||
legendWeatherOnly: '僅天氣',
|
||||
},
|
||||
cordnUi: {
|
||||
title: '私密聊天',
|
||||
subtitle: 'Crew 成員之間的端到端加密(MLS)。協調器只路由密文和中繼資料——它永遠看不到訊息內容。',
|
||||
notLoggedIn: '登入以使用 Crew 的私密聊天。',
|
||||
membersOnly: '只有 Crew 成員才能開啟私密聊天。',
|
||||
connecting: '連線中…',
|
||||
noCoordinator: '此 Crew 尚未設定協調器。',
|
||||
noGroupAdmin: '此 Crew 的私密聊天尚未建立。',
|
||||
noGroupMember: '你還沒有加入此 Crew 的私密聊天。',
|
||||
create: '建立私密聊天',
|
||||
requestJoin: '要求加入',
|
||||
checkInvite: '檢查邀請',
|
||||
requested: '要求已送出——Crew 管理員會批准。',
|
||||
noInvite: '還沒有等待中的邀請。請管理員批准你的要求。',
|
||||
placeholder: '傳訊息給 Crew…',
|
||||
send: '傳送',
|
||||
refresh: '重新整理',
|
||||
requests: '加入要求',
|
||||
checkRequests: '檢查要求',
|
||||
approve: '新增',
|
||||
noRequests: '沒有待處理的加入要求。',
|
||||
inviteHint: '目前只有你在這個聊天中——Crew 成員可以點「要求加入」,然後你在這裡批准他們。',
|
||||
memberCount: '群組中有 {{count}} 人',
|
||||
you: '你',
|
||||
groupRef: '群組連結',
|
||||
copyRef: '複製',
|
||||
copied: '已複製',
|
||||
attachImage: '附加圖片',
|
||||
uploading: '上傳中…',
|
||||
uploadFailed: '無法上傳圖片。',
|
||||
bannerTitle: '此 Crew 還沒有私密聊天',
|
||||
bannerBody: '為你的 Crew 設定端到端加密(MLS)聊天——成員從分頁加入。',
|
||||
bannerCta: '設定',
|
||||
ready: '已連線 · MLS',
|
||||
errorPrefix: '無法連線協調器',
|
||||
interactiveHint: '你的簽章器會為每個操作要求核准——視需要使用重新整理和傳送。',
|
||||
},
|
||||
};
|
||||
|
||||
export default drift;
|
||||
|
|
@ -6,8 +6,11 @@ import batch5 from './batch5';
|
|||
import batch6 from './batch6';
|
||||
import batch7 from './batch7';
|
||||
import batch8 from './batch8';
|
||||
import drift from './drift';
|
||||
import { deepMerge } from '../deepMerge';
|
||||
|
||||
const zhTW = {
|
||||
const zhTW = deepMerge(
|
||||
{
|
||||
...batch1,
|
||||
...batch2,
|
||||
...batch3,
|
||||
|
|
@ -16,6 +19,8 @@ const zhTW = {
|
|||
...batch6,
|
||||
...batch7,
|
||||
...batch8,
|
||||
};
|
||||
},
|
||||
drift,
|
||||
);
|
||||
|
||||
export default zhTW;
|
||||
|
|
|
|||
Loading…
Reference in a new issue