diff --git a/src/components/LanguageToggle.tsx b/src/components/LanguageToggle.tsx index 0ebe22a..d43b9b1 100644 --- a/src/components/LanguageToggle.tsx +++ b/src/components/LanguageToggle.tsx @@ -32,6 +32,7 @@ const languages: LanguageOption[] = [ { code: 'ja', name: 'Japanese', nativeName: '日本語', flag: '🇯🇵' }, { code: 'zh-CN', name: 'Chinese (Simplified)', nativeName: '简体中文', flag: '🇨🇳' }, { code: 'zh-TW', name: 'Chinese (Traditional)', nativeName: '繁體中文', flag: '🇹🇼' }, + { code: 'id', name: 'Indonesian', nativeName: 'Bahasa Indonesia', flag: '🇮🇩' }, { code: 'cs', name: 'Czech', nativeName: 'Čeština', flag: '🇨🇿' }, { code: 'ro', name: 'Romanian', nativeName: 'Română', flag: '🇷🇴' }, { code: 'sv', name: 'Swedish', nativeName: 'Svenska', flag: '🇸🇪' }, diff --git a/src/i18n/id/batch1.ts b/src/i18n/id/batch1.ts index 8bb29de..9ffcd08 100644 --- a/src/i18n/id/batch1.ts +++ b/src/i18n/id/batch1.ts @@ -1,4 +1,290 @@ -/** id — batch 1. Filled by the translation pass; empty until then. */ -const idBatch1 = {}; +/** id — batch 1. Filled by the 2026-10-08 Indonesian translation pass. */ +const idBatch1 = { + common: { + loading: "Memuat...", + error: "Error", + save: "Simpan", + cancel: "Batal", + delete: "Hapus", + edit: "Edit", + add: "Tambah", + remove: "Hapus", + create: "Buat", + submit: "Kirim", + close: "Tutup", + back: "Kembali", + next: "Berikutnya", + done: "Selesai", + search: "Cari", + filter: "Filter", + sort: "Urutkan", + share: "Bagikan", + more: "Lainnya", + copy: "Salin", + copied: "Disalin!", + viewAll: "Lihat Semua", + seeMore: "Lihat Selengkapnya", + showMore: "Tampilkan Lebih Banyak", + showLess: "Tampilkan Lebih Sedikit", + noResults: "Tidak ada hasil ditemukan", + tryAgain: "Coba Lagi", + learnMore: "Pelajari Lebih Lanjut", + getStarted: "Mulai", + yes: "Ya", + no: "Tidak", + or: "atau", + and: "dan", + free: "Gratis", + new: "Baru", + popular: "Populer", + featured: "Unggulan", + verified: "Terverifikasi", + sats: "sats", + clear: "Bersihkan", + clearFilters: "Bersihkan Filter", + clearAll: "Bersihkan Semua", + hide: "Sembunyikan", + undo: "Urungkan", + }, + nav: { + home: "Beranda", + map: "Spot", + lab: "The Lab", + events: "Event", + crews: "Crew", + wallet: "Dompet", + settings: "Pengaturan", + more: "Lainnya", + rewards: "Hadiah", + stats: "Statistik Komunitas", + about: "Tentang", + food: "Makanan", + marketplace: "Marketplace", + mints: "Mints", + appShop: "Toko Aplikasi", + diy: "DIY", + trades: "Marketplace", + stash: "Stash", + collections: "Koleksi", + contacts: "Kontak", + messages: "Pesan", + skaters: "Skater", + glossary: "Glosarium", + riderCard: "Kartu Rider", + supporters: "Pendukung ⚡", + newsletter: "Buletin", + viewProfile: "Lihat Profil", + leaderboards: "Papan Peringkat", + }, + chromeUi: { + skipToContent: "Lewati ke konten", + menu: "Menu", + inBadge: "Masuk", + loggedIn: "Sudah Masuk", + profile: "Profil", + logIn: "Masuk", + logOut: "Keluar", + notLoggedIn: "Belum Masuk", + loggedOutPrompt: "Masuk untuk menambahkan spot, zap skater, dan menyimpan favorit Anda", + accounts: "Akun", + addAnotherAccount: "Tambah akun lain", + setStatus: "Atur Status", + setYourStatus: "Atur Status Anda", + status: "Status", + addSpot: "Tambah Spot", + myData: "Data Saya", + myStash: "Stash Saya", + myCollections: "Koleksi Saya", + viewMyProfile: "Lihat profil saya", + customizeNavBar: "Sesuaikan bilah navigasi", + ecash: "Ecash", + madeWith: "Dibuat dengan", + forSkateCommunity: "untuk komunitas skateboard", + beta: "Beta", + license: "Lisensi", + privacy: "Privasi", + collaborators: "Kolaborator & Teman", + notSponsoredBy: "Tidak disponsori oleh", + errorTitle: "Gagal memuat ini", + errorDescription: "Permintaan jaringan gagal. Periksa koneksi Anda dan coba lagi.", + tryAgain: "Coba lagi", + weatherOn: "Cuaca Aktif", + weatherOff: "Cuaca Nonaktif", + trustFilter: "Filter Kepercayaan", + filterByTrustLevel: "Filter Berdasarkan Tingkat Kepercayaan", + trust: { + all: "Semua Pengguna", + allDesc: "Tampilkan konten dari semua orang", + verified: "Terverifikasi", + verifiedDesc: "Anda mengikuti mereka atau mereka terverifikasi (kepercayaan ≥90)", + trusted: "Terpercaya", + trustedDesc: "Teman-dari-teman atau terverifikasi NIP-05 (kepercayaan ≥60)", + following: "Hanya Mengikuti", + followingDesc: "Hanya tampilkan konten dari orang yang Anda ikuti", + followingShort: "Mengikuti", + }, + sort: { + recent: "Terbaru", + recentDesc: "Terbaru lebih dulu", + trust: "Kepercayaan Tertinggi", + trustDesc: "Pembuat paling terpercaya", + proximity: "Terdekat dari Saya", + proximityDesc: "Lokasi terdekat", + popular: "Paling Populer", + popularDesc: "Komentar/reaksi terbanyak", + zaps: "Paling Banyak Di-zap", + zapsDesc: "Nilai diterima tertinggi", + }, + spotType: { + street: "Street", + transition: "Transition", + park: "Park", + plaza: "Plaza", + diy: "DIY", + bowl: "Bowl", + vert: "Vert", + indoor: "Indoor", + skatepark: "Skatepark", + miniramp: "Mini Ramp", + }, + }, + desktopNav: { + title: "Navigasi desktop", + desc: "Pilih tab mana yang muncul di bilah atas dan urutannya. Tab yang disembunyikan tetap ada di menu “Lainnya”.", + fixed: "Tetap", + shownInTopBar: "Ditampilkan di bilah atas ({{count}})", + noExtraTabs: "Tidak ada tab tambahan yang ditampilkan — semuanya ada di menu “Lainnya”. Tambahkan beberapa di bawah.", + inMoreMenu: "Di menu “Lainnya” ({{count}})", + moveUp: "Pindahkan {{name}} ke atas", + moveDown: "Pindahkan {{name}} ke bawah", + hide: "Sembunyikan {{name}}", + moveToMore: "Pindahkan ke menu Lainnya", + show: "Tampilkan", + showInTopBar: "Tampilkan {{name}} di bilah atas", + showInTopBarTitle: "Tampilkan di bilah atas", + reset: "Atur ulang ke default", + }, + navSheet: { + title: "Sesuaikan bilah Anda", + desc: "Pilih {{count}} tab yang paling sering Anda gunakan. Sisanya tetap di menu.", + preview: "Pratinjau", + empty: "Kosong", + order: "Urutan ({{done}}/{{total}})", + available: "Tab yang tersedia", + full: "Bilah penuh — hapus satu untuk menukar", + moveUp: "Pindahkan {{name}} ke atas", + moveDown: "Pindahkan {{name}} ke bawah", + login: "Masuk", + profile: "Profil", + reset: "Atur ulang", + done: "Selesai", + }, + pwa: { + installTitle: "Pasang SkateSpots", + installSubtitle: "Dapatkan pengalaman aplikasi lengkap", + addToHomeScreen: "Tambahkan ke Layar Utama", + installApp: "Pasang Aplikasi", + maybeLater: "Nanti saja", + gotIt: "Mengerti!", + benefits: { + fast: "Lightning Fast", + offline: "Bekerja Offline", + fullAccess: "Akses Penuh", + }, + iosStep1: "Ketuk tombol Bagikan", + iosStep1Hint: "di bagian bawah Safari", + iosStep2: "Gulir dan ketuk \"Tambahkan ke Layar Utama\"", + iosStep2Hint: "di menu bagikan", + iosStep3: "Ketuk \"Tambah\" untuk memasang", + iosStep3Hint: "Aplikasi akan muncul di layar utama Anda", + androidStep1: "Ketuk tombol menu", + androidStep1Hint: "(tiga titik) di peramban Anda", + androidStep2: "Pilih \"Tambahkan ke Layar Utama\"", + androidStep2Hint: "atau \"Pasang Aplikasi\"", + androidStep3: "Konfirmasi untuk memasang", + androidStep3Hint: "Aplikasi akan muncul di layar utama Anda", + tagline: "Gratis • Bekerja offline • Cepat & andal", + }, + home: { + tagline: "Digerakkan Komunitas • Berbasis Relay", + title: "SKATE SPOTS", + subtitle: "Temukan Spot • Bertemu • Pelajari Trick • Dukung Lokal", + description: "Skateboarding sungguhan terjadi offline - alat ini membantu Anda menemukannya.", + betaWarning: "BETA - Sedang Dibangun • Gunakan dengan Risiko Sendiri", + pwaHint: "Progressive Web App - Pasang di Perangkat Anda", + exploreMap: "Jelajahi Peta", + addSpot: "Tambah Spot", + globalSpots: "Spot Global", + openCommunity: "Komunitas Terbuka", + lightningZaps: "Lightning Zaps", + featuredSpots: "Spot Unggulan", + featuredSpotsDesc: "Spot skateboard terverifikasi komunitas dari seluruh dunia", + upcomingEvents: "Event Mendatang", + upcomingEventsDesc: "Kontes, pertemuan, dan sesi yang akan datang", + noSpotsYet: "Belum ada spot ditemukan", + noSpotsHint: "Jadilah yang pertama menambahkan spot skate!", + noEventsYet: "Tidak ada event mendatang", + noEventsHint: "Periksa lagi nanti atau buat satu!", + theLab: "The Lab", + theLabDesc: "Pelajari trick, temukan coach, dan tingkatkan skating Anda", + coaches: "Coach", + coachesDesc: "Belajar dari skater berpengalaman yang dapat membantu Anda berkembang", + filmers: "Filmer", + filmersDesc: "Terhubung dengan filmer untuk mengabadikan klip terbaik Anda", + findCoach: "Temukan Coach", + becomeCoach: "Jadi Coach", + findFilmer: "Temukan Filmer", + becomeFilmer: "Jadi Filmer", + viewAllSpots: "Lihat Semua Spot", + viewAllEvents: "Lihat Semua Event", + createEvent: "Buat Event", + readyToShare: "Siap Berbagi?", + readyToShareDesc: "Bantu komunitas skateboard tumbuh dengan menambahkan spot favorit Anda. Setiap lokasi yang Anda bagikan membantu sesama skater menemukan tempat baru untuk shred.", + }, + about: { + title: "Tentang SkateSpots", + subtitle: "Komunitas skateboard terdesentralisasi", + whatIs: "Apa itu SkateSpots?", + whatIsDesc: "SkateSpots adalah platform yang digerakkan komunitas untuk menemukan lokasi skateboard di seluruh dunia. Dibangun di atas Nostr, ini memberi skater kepemilikan sejati atas data mereka.", + features: "Fitur", + featuresDesc: "Temukan spot, buat event, terhubung dengan coach, dan dukung toko skate lokal Anda—semuanya di satu tempat.", + nostr: "Dibangun di atas Nostr", + nostrDesc: "Nostr adalah protokol terbuka yang sederhana yang memungkinkan komunikasi global yang benar-benar tahan sensor. Akun dan data Anda milik Anda.", + openSource: "Sumber Terbuka", + openSourceDesc: "SkateSpots sepenuhnya open source. Berkontribusi, fork, atau jalankan instance Anda sendiri.", + lightning: "Pembayaran Lightning", + lightningDesc: "Zap skater, coach, dan pembuat konten favorit Anda dengan pembayaran Bitcoin Lightning.", + }, + faq: { + title: "Pertanyaan yang Sering Diajukan", + subtitle: "Semua yang perlu Anda ketahui tentang SkateSpots", + whatIsNostr: "Apa itu Nostr?", + whatIsNostrAnswer: "Nostr adalah protokol terbuka untuk jejaring sosial terdesentralisasi. Berbeda dengan platform tradisional, Anda memiliki data dan identitas Anda.", + howToStart: "Bagaimana cara memulai?", + howToStartAnswer: "Klik \"Daftar\" untuk membuat akun Nostr baru, atau \"Masuk\" jika Anda sudah memilikinya. Anda dapat menggunakan ekstensi peramban, aplikasi seluler, atau kunci rahasia.", + whatAreZaps: "Apa itu Zap?", + whatAreZapsAnswer: "Zap adalah tip Bitcoin Lightning yang dapat Anda kirim ke pengguna lain. Ini adalah cara untuk menunjukkan penghargaan atas konten hebat atau mendukung kreator.", + howToAddSpot: "Bagaimana cara menambahkan spot?", + howToAddSpotAnswer: "Masuk ke akun Anda, klik \"Tambah Spot\" dan isi detailnya termasuk lokasi, foto, dan deskripsi.", + isItFree: "Apakah SkateSpots gratis?", + isItFreeAnswer: "Ya! SkateSpots sepenuhnya gratis untuk digunakan. Anda dapat secara opsional mengirim Zap (tip Bitcoin) ke pengguna lain.", + canIEditSpot: "Bisakah saya mengedit atau menghapus spot saya?", + canIEditSpotAnswer: "Ya, Anda dapat mengedit spot yang telah Anda buat. Karena sifat Nostr yang terdesentralisasi, permintaan penghapusan dikirim tetapi beberapa relay mungkin tetap menyimpan data.", + }, + onboarding: { + welcome: "Selamat datang di SkateSpots!", + welcomeDesc: "Mari siapkan Anda hanya dalam beberapa langkah.", + step1Title: "Buat Akun Anda", + step1Desc: "Kunci Nostr Anda sedang dibuat. Ini seperti kata sandi yang Anda kendalikan.", + step2Title: "Cadangkan Kunci Anda", + step2Desc: "Simpan frasa pemulihan Anda di tempat yang aman. Ini satu-satunya cara memulihkan akun Anda!", + step3Title: "Siapkan Profil Anda", + step3Desc: "Ceritakan tentang diri Anda kepada komunitas.", + step4Title: "Anda Siap!", + step4Desc: "Mulai jelajahi spot, event, dan terhubung dengan skater.", + skipForNow: "Lewati dulu", + continueToApp: "Lanjut ke Aplikasi", + }, +}; export default idBatch1; diff --git a/src/i18n/id/batch2.ts b/src/i18n/id/batch2.ts index 4ae9754..3c65108 100644 --- a/src/i18n/id/batch2.ts +++ b/src/i18n/id/batch2.ts @@ -1,4 +1,1652 @@ -/** id — batch 2. Filled by the translation pass; empty until then. */ -const idBatch2 = {}; +/** id — batch 2. Filled by the 2026-10-08 Indonesian translation pass. */ +const idBatch2 = { + mapUi: { + mapFooter: { + links: "Links", + hide: "Sembunyikan bilah tautan peta", + }, + findingSpots: "Mencari spot", + loadingSpots: "Memuat spot", + loadingMap: "Memuat peta...", + mapViewAria: "Tampilan peta", + listViewAria: "Tampilan daftar", + layers: "Lapisan", + mapLayers: "Lapisan peta", + showOnMap: "Tampilkan di Peta", + showResults: "Tampilkan Hasil", + quickActions: "Aksi Cepat", + spots: "Spot", + shops: "Toko", + gear: "Gear", + tours: "Tur", + events: "Event", + crews: "Crew", + spotType: "Tipe Spot", + sortBy: "Urutkan Berdasarkan", + trustLevel: "Tingkat Kepercayaan", + weather: "Cuaca", + buySellGear: "Beli/Jual Gear", + stash: "Stash", + more: "Lainnya", + newHere: "Baru di sini?", + welcomeDesc: "Temukan spot skate, event & komunitasnya.", + getOnZapstore: "Dapatkan di Zapstore", + dismiss: "Tutup", + addedBy: "Ditambahkan oleh", + directions: "Rute", + viewDetails: "Lihat Detail", + viewDetailsArrow: "Lihat Detail →", + spotDetails: "Detail spot", + skateShop: "Toko Skate", + skateSpot: "Spot Skate", + youAreHere: "Anda di sini", + conditions: "Kondisi", + weatherScoreSuffix: "{{score}}/100 cuaca", + wind: "Angin", + humidity: "Kelembapan", + airQuality: "Kualitas udara", + threeDayForecast: "Prakiraan 3 Hari", + gearForSale: "Gear dijual ({{count}})", + viewItems: "Lihat Item →", + viewAllItems: "Lihat Semua {{count}} Item →", + viewGear: "Lihat Gear →", + localTour: "Tur Lokal", + meetAt: "Bertemu di: {{place}}", + hours: "{{count}} jam", + level: "level {{level}}", + viewTour: "Lihat Tur →", + upcomingEvent: "Event Mendatang", + viewEvent: "Lihat Event →", + skateCrew: "Crew Skate", + members: "{{count}} anggota", + since: "Sejak {{year}}", + viewCrew: "Lihat Crew →", + acceptsBitcoin: "Menerima Bitcoin", + boosted: "Di-boost", + website: "Situs web", + offlineSavedSpots: "Offline · menampilkan spot tersimpan", + cantReachRelays: "Tidak dapat menjangkau Relay", + relayOnlineNoAnswer: "Anda online, tetapi Relay komunitas tidak merespons saat ini.", + youreOffline: "Anda offline.", + savedOnDevice: "Spot yang sudah Anda lihat tersimpan di perangkat ini dan akan tampil di sini.", + noSpotsMatchTitle: "Tidak ada spot yang cocok", + noSpotsMatchDesc: "Coba pencarian lain atau hapus filter Anda.", + noSpotsMappedYet: "Belum ada spot yang dipetakan", + noSpotsMappedDesc: "Jadilah yang pertama memetakan park Anda — hanya butuh semenit, itu milik Anda, dan skater berikutnya yang lewat akan berterima kasih.", + addFirstSpot: "Tambahkan spot pertama", + findSpotsNearMe: "Cari spot di dekat saya", + locating: "Menentukan lokasi…", + refiningLocation: "Menyempurnakan lokasi Anda…", + refiningLocationDesc: "Berpusat pada spot terakhir Anda — mengambil titik GPS baru.", + locatingYou: "Menentukan lokasi Anda…", + locatingDesc: "Mengambil titik GPS. Ini bisa memakan waktu hingga semenit saat pertama kali.", + foundYou: "Anda ditemukan", + foundYouDesc: "Peta dipusatkan pada lokasi Anda.", + locationPermissionNeeded: "Izin lokasi diperlukan", + permissionNeededDesc: "Izinkan lokasi untuk SkateSpots di Pengaturan perangkat → Aplikasi → SkateSpots → Izin, lalu ketuk Di Dekat Saya lagi.", + locationTimedOut: "Waktu lokasi habis", + timeoutNativeDesc: "Tidak bisa mendapatkan titik lokasi tepat waktu. Jika Anda di dalam ruangan, GPS tidak dapat melihat satelit — aktifkan Lokasi Jaringan (Pengaturan → Lokasi) atau keluar ruangan, lalu coba lagi.", + timeoutWebDesc: "Tidak dapat memperoleh lokasi Anda tepat waktu. Periksa sinyal dan coba lagi.", + noLocationProvider: "Tidak ada penyedia lokasi", + noProviderNativeDesc: "Ponsel Anda tidak memberikan lokasi. Pada ROM yang berfokus privasi (mis. GrapheneOS) aktifkan Lokasi Jaringan di Pengaturan → Lokasi, atau pastikan GPS menyala dan coba di luar ruangan.", + noProviderWebDesc: "Tidak ada penyedia lokasi yang tersedia. Aktifkan layanan lokasi dan coba lagi.", + locationUnavailable: "Lokasi tidak tersedia", + unavailableNativeDesc: "Nyalakan Lokasi/GPS di pengaturan ponsel, izinkan lokasi untuk SkateSpots (Pengaturan → Aplikasi → SkateSpots → Izin), lalu coba lagi.", + unavailableWebDesc: "Lokasi Anda tidak dapat ditentukan. Pastikan layanan lokasi aktif.", + locationBlocked: "Lokasi Diblokir", + locationBlockedDesc: "Browser Anda memblokir akses lokasi untuk situs ini. Berikut cara mengaktifkannya kembali:", + locationPlatformAndroid: "Android Chrome", + locationPlatformIos: "iOS Safari", + locationPlatformDesktop: "Desktop Chrome", + locationPlatformFirefox: "Firefox", + locationStepsAndroid: "Ketuk ikon kunci di bilah alamat → Setelan situs → Lokasi → Izinkan", + locationStepsIos: "Aplikasi Pengaturan → Safari → Lokasi → Izinkan (atau ketuk tombol \"AA\" di bilah alamat Safari)", + locationStepsDesktop: "Klik ikon kunci → Setelan situs → Lokasi → Izinkan", + locationStepsFirefox: "Klik ikon kunci → Koneksi aman → Info selengkapnya → Izin → Akses lokasi Anda → Izinkan", + gotIt: "Mengerti", + addSpot: "Tambah Spot", + addShop: "Tambah Toko", + addEvent: "Tambah Event", + addSpotHereTitle: "Tambah spot di sini?", + addSpotHereDesc: "Jatuhkan pin di tempat Anda mengetuk", + sellGear: "Jual Gear", + offerTour: "Tawarkan Tur", + closeAddMenu: "Tutup menu tambah", + addMenuAria: "Tambah spot, toko, event, gear, atau tur", + localChat: "Chat Lokal", + localChatDesc: "Chat langsung untuk di mana pun peta dipusatkan. Pilih seberapa luas jangkauan saluran.", + btcMapShowing: "Menampilkan {{count}} tempat di mana Anda dapat Spedn sats Anda di dekat sini", + btcMapShow: "Tampilkan tempat di mana Anda dapat Spedn sats Anda (via BTC Map)", + yourPrivateStash: "Stash Pribadi Anda", + stashIntro: "Lacak gear Anda, tetapkan harga, dan temukan tukar-menukar dengan skater lain.", + encryptionRequired: "Enkripsi Diperlukan", + encryptionRequiredDesc: "Gunakan penanda tangan dengan dukungan NIP-44 (Alby, nos2x, Amber).", + myStash: "Stash Saya", + encrypted: "Terenkripsi", + itemsCount: "{{count}} item", + items: "Item", + wishlist: "Daftar Keinginan", + types: "Jenis", + stashEmpty: "Stash Anda kosong", + addFirstItem: "Tambah Item Pertama", + wishlistCount: "Daftar Keinginan ({{count}})", + myGearCount: "Gear Saya ({{count}})", + openFullStash: "Buka Stash Lengkap", + addItem: "Tambah Item", + searchSpotsPlaceholder: "Cari spot...", + selected: "Dipilih", + noSpotsFound: "Tidak ada spot ditemukan. Coba pencarian lain.", + addingSpotsHint: "Menambahkan spot membantu pengguna menemukan Anda saat menelusuri lokasi tertentu", + report: "Laporkan", + spotSingular: "1 spot", + spotPlural: "{{count}} spot", + view: "Lihat", + myCollections: "Koleksi Saya", + collectionsSubtitle: "Atur spot favorit Anda ke dalam daftar yang dipersonalisasi", + newCollection: "Koleksi Baru", + loginToCreate: "Masuk untuk membuat koleksi", + loginToCreateDesc: "Simpan spot favorit Anda ke daftar yang dipersonalisasi seperti \"Barcelona Trip 2024\" atau \"Best Rails in LA\"", + noCollections: "Belum ada koleksi", + noCollectionsDesc: "Buat koleksi pertama Anda untuk mulai mengatur spot", + createFirstCollection: "Buat Koleksi Pertama Anda", + createNewCollection: "Buat Koleksi Baru", + createCollectionDesc: "Beri nama koleksi Anda dan deskripsi opsional", + collectionName: "Nama Koleksi", + collectionNamePlaceholder: "Barcelona Trip 2024", + descriptionOptional: "Deskripsi (opsional)", + descriptionPlaceholder: "Spot favorit saya dari perjalanan Barcelona...", + creating: "Membuat...", + createCollection: "Buat Koleksi", + editCollection: "Edit Koleksi", + saving: "Menyimpan...", + saveChanges: "Simpan Perubahan", + deleteCollectionTitle: "Hapus Koleksi?", + deleteCollectionDesc: "Ini akan menghapus \"{{title}}\" secara permanen. Spot-nya sendiri tidak akan terpengaruh.", + deleting: "Menghapus...", + collectionCreated: "Koleksi dibuat!", + collectionCreatedDesc: "\"{{title}}\" siap diisi spot", + collectionCreateFailed: "Gagal membuat koleksi", + collectionUpdated: "Koleksi diperbarui!", + changesSaved: "Perubahan Anda telah disimpan", + collectionUpdateFailed: "Gagal memperbarui koleksi", + collectionDeleted: "Koleksi dihapus", + collectionDeletedDesc: "\"{{title}}\" telah dihapus", + collectionDeleteFailed: "Gagal menghapus koleksi", + somethingWentWrong: "Terjadi kesalahan", + }, + mapPage: { + title: "Toko & Spot", + spots: "Spot", + shops: "Toko", + filters: "Filter", + listView: "Daftar", + mapView: "Peta", + nearMe: "Di Dekat Saya", + searchPlaceholder: "Cari spot...", + noSpotsInArea: "Tidak ada spot di area ini", + zoomIn: "Perbesar", + zoomOut: "Perkecil", + myLocation: "Lokasi Saya", + locationsFound: "{{count}} lokasi ditemukan", + spotsOnly: "Hanya spot", + shopsOnly: "Hanya toko", + spotsAndShops: "Spot & Toko", + noSpotsMatch: "Tidak ada spot yang cocok dengan filter Anda.", + noSpotsYet: "Belum ada spot yang ditambahkan.", + addFirstSpot: "Tambah Spot Pertama", + }, + spotUi: { + claim: { + areYouOwner: "Apakah ini spot Anda?", + privateDesc: "Spot ini ditandai privat. Jika Anda memiliki atau mengelolanya, klaim — moderator SkateSpots mengonfirmasi kepemilikan, lalu Anda mengambil alih listing.", + claimSpot: "Klaim spot ini", + nip05Required: "Anda memerlukan handle NIP-05 terverifikasi untuk mengklaim spot privat (bukti Anda mengendalikan identitas Nostr). Tambahkan di profil Anda, lalu kembali.", + addNip05: "Tambahkan NIP-05 di Pengaturan", + pendingTitle: "Klaim menunggu peninjauan", + pendingDesc: "Klaim Anda telah dikirim. Moderator SkateSpots akan meninjaunya — Anda dapat menyelesaikan klaim spot setelah disetujui.", + approvedTitle: "Klaim disetujui", + approvedDesc: "Moderator menyetujui klaim Anda. Selesaikan untuk menjadi pemilik spot ini.", + complete: "Selesaikan klaim", + submitted: "Klaim dikirim", + submittedDesc: "Moderator akan meninjau klaim Anda. Anda akan mengambil alih spot setelah disetujui.", + submitFailed: "Tidak dapat mengirim klaim", + submit: "Kirim klaim", + submitting: "Mengirim…", + confirmTitle: "Klaim \"{{title}}\"?", + confirmIntro: "Anda meminta untuk menjadi pemilik spot privat ini.", + confirmBullet1: "Moderator SkateSpots meninjau permintaan (kami tidak dapat memverifikasi properti, hanya kunci Nostr)", + confirmBullet2: "Jika disetujui, Anda menyelesaikan klaim untuk menjadi pemilik dan dapat mengedit spot", + confirmBullet3: "Spot asli tetap di Nostr — jaringannya terdesentralisasi", + adminTitle: "Klaim kepemilikan yang tertunda", + adminApprove: "Setujui", + adminApproved: "Disetujui", + adminApprovedDesc: "Mereka sekarang dapat menyelesaikan klaim spot.", + adminApproveFailed: "Tidak dapat menyetujui klaim", + loginRequired: "Masuk untuk mengklaim spot privat ini, atau untuk meminta kepemilikan.", + }, + abandonedDesc: "Terakhir diperbarui {{time}}. Jika pemilik asli tidak aktif, Anda dapat mengklaim spot ini untuk memelihara dan memperbaikinya.", + claimedNotice: "Listing yang diklaim", + claimedNoticeDesc: "Spot ini diterbitkan ulang oleh pemilik baru setelah klaim. Listing asli mungkin masih ada secara terpisah.", + abandonedLoginDesc: "Terakhir diperbarui {{time}}. Masuk untuk mengklaim dan memelihara spot ini.", + accessDeniedDesc: "Anda hanya dapat mengedit spot yang Anda buat.", + accessDeniedTitle: "Akses Ditolak", + addAtLeastOneTag: "Tambahkan setidaknya satu tag.", + additionalDetails: "Detail tambahan (opsional)", + additionalDetailsPlaceholder: "Berikan konteks tambahan yang mungkin membantu...", + addNewTags: "Tambah tag baru:", + addNip05InSettings: "Tambahkan NIP-05 di Pengaturan", + addPhoto: "Tambah Foto", + addPhotoDesc: "Kontribusikan foto untuk membantu orang lain menemukan spot ini.", + addPhotoOrDescription: "Tambah foto atau deskripsi", + addPhotoOrDescriptionDesc: "Beri skater sesuatu untuk dijadikan acuan — sebuah foto, atau satu baris tentang tempat itu.", + addPhotos: "Tambah Foto", + addPhotoToSpot: "Tambah Foto ke Spot", + adminDeleteDialogDesc: "Sebagai admin SkateSpots, Anda menurunkan \"{{title}}\". Ini akan disembunyikan di seluruh aplikasi untuk semua orang dan permintaan penghapusan akan dikirim ke Relay.", + adminDeleteReason: "Admin SkateSpots menghapus spot \"{{title}}\"", + airQuality: "Kualitas Udara", + altSkateSpot: "Spot skate: {{title}}", + areYouShopOwner: "Apakah Anda Pemilik Toko?", + askBeforeSkating: "Tanya dulu sebelum skate", + backToSpot: "Kembali ke Spot", + beFirstToListGear: "Jadilah yang pertama memasang gear di spot ini!", + beFirstToSay: "Jadilah yang pertama mengatakan sesuatu.", + byAuthor: "oleh {{name}}", + captionPlaceholder: "Tambahkan keterangan (opsional) - jelaskan isi foto, kapan diambil, dll.", + chatPublicNote: "Siapa pun dapat membaca ini — pesannya publik & sementara. Untuk chat pribadi, gunakan Pesan Langsung.", + checkPinBelow: "Periksa pin di bawah sebelum menambahkan duplikat.", + claimBullet1: "Anda menjadi pemilik dan dapat mengedit spot", + claimBullet2: "Spot asli tetap ada (Nostr terdesentralisasi)", + claimBullet3: "Versi Anda mungkin muncul di samping yang asli", + claimFailed: "Klaim gagal", + claiming: "Mengklaim...", + claimIntro: "Anda akan mengklaim kepemilikan spot ini. Ini akan membuat versi spot Anda sendiri yang dapat Anda edit dan pelihara.", + claimSpot: "Klaim Spot", + claimThisSpot: "Klaim Spot Ini", + claimTitle: "Klaim \"{{title}}\"?", + claimWhatHappens: "Apa yang terjadi saat Anda mengklaim:", + coachesAndFilmersAvailable: "Coach dan filmer tersedia di spot ini", + coachesCount: "Coach ({{count}})", + coachHere: "Coach di Sini", + community: "Komunitas", + communityVerified: "Diverifikasi komunitas", + communityVerifiedTitle: "Skater lain telah berkontribusi di sini (foto atau laporan status).", + conditions: "Kondisi", + contactForPermission: "Hubungi untuk izin", + contactInfo: "Info Kontak", + contributePhoto: "Kontribusikan Foto", + contributing: "Berkontribusi...", + couldNotSendMessage: "Tidak dapat mengirim pesan.", + couldNotSubmit: "Tidak dapat mengirim", + couldNotUploadPhoto: "Tidak dapat mengunggah foto. Anda dapat menambahkannya di bawah.", + crewsThatSkateHere: "Crew yang skate di sini", + current: "Saat ini:", + currentTags: "Tag saat ini di spot ini:", + daysAgo: "{{count}} hari lalu", + daysAgoPlural: "{{count}} hari lalu", + deleteDialogDesc: "Ini akan menghapus \"{{title}}\" secara permanen dari semua Relay. Tindakan ini tidak dapat dibatalkan.", + deletedSpotReason: "Spot dihapus", + deleteFailed: "Penghapusan gagal", + deleteSpot: "Hapus Spot", + deleteSpotTitle: "Hapus Spot?", + differentSpotPublishAnyway: "Ini spot yang berbeda — tetap terbitkan", + dragDropOrClick: "Seret & lepas atau klik", + dropPhotos: "Lepaskan foto", + duplicateOne: "Ada spot dalam jarak 60 m dari pin Anda. Jika tempatnya sama, tambahkan foto atau laporan status di sana alih-alih membuat duplikat.", + duplicateOther: "Ada beberapa spot dalam jarak 60 m dari pin Anda. Jika tempatnya sama, tambahkan foto atau laporan status di sana alih-alih membuat duplikat.", + editSpotSeoDesc: "Edit spot skateboard Anda.", + failedToContribute: "Gagal berkontribusi", + failedToPublish: "Gagal menerbitkan", + failedToPublishDesc: "Terjadi kesalahan. Periksa konsol untuk detail.", + failedToSubmitReport: "Gagal mengirim laporan", + failedToSuggestTags: "Gagal menyarankan tag", + failedToUpdate: "Gagal memperbarui", + failedToUploadImage: "Gagal mengunggah gambar", + failedToUploadPhoto: "Gagal mengunggah foto", + feelsLikeTemp: "Terasa seperti {{temp}}°C", + filmersCount: "Filmer ({{count}})", + filmHere: "Rekam di Sini", + gearSwap: "Tukar Gear", + geolocationNotSupported: "Geolokasi tidak didukung", + geolocationNotSupportedDesc: "Browser Anda tidak mendukung geolokasi.", + getDirections: "Dapatkan Rute", + hangTight: "Tunggu sebentar", + hangTightDesc: "Foto Anda masih diunggah. Ini akan dilampirkan sebentar lagi.", + helpImproveSpot: "Bantu tingkatkan spot ini dengan menambahkan foto atau menyarankan tag", + hiddenByModerator: "Disembunyikan oleh moderator", + hiddenByModeratorDesc: "Spot ini tidak ditampilkan di peta atau pencarian. Anda masih bisa melihatnya karena ini milik Anda. Mengeditnya tidak akan menampilkannya kembali — tetap tersembunyi sampai moderator mencabut keputusan.", + humidity: "Kelembapan", + imageUploaded: "Gambar diunggah", + imageUploadedDesc: "Gambar Anda berhasil diunggah.", + imHere: "Saya di Sini", + invalidCoordinates: "Koordinat tidak valid", + invalidCoordinatesDesc: "Masukkan lintang (-90 hingga 90) dan bujur (-180 hingga 180) yang valid.", + invalidNpub: "npub tidak valid", + invalidNpubDesc: "Masukkan alamat npub yang valid.", + lastReported: "terakhir {{time}}", + listGear: "Pasang Gear", + listYourGearHere: "Pasang Gear Anda di Sini", + loadingChat: "Memuat chat…", + locationError: "Kesalahan lokasi", + locationFound: "Lokasi ditemukan", + locationFoundDesc: "Lokasi Anda saat ini telah ditetapkan.", + locationRequired: "Lokasi diperlukan", + locationRequiredDesc: "Masukkan koordinat atau gunakan lokasi Anda saat ini.", + loginRequiredTitle: "Perlu Masuk", + logInToChat: "Masuk untuk bergabung dengan chat lokal.", + logInToContributePhotos: "Masuk untuk berkontribusi foto", + loginToEditSpot: "Anda perlu masuk untuk mengedit spot ini.", + logInToReport: "Anda perlu masuk untuk melaporkan konten.", + logInToReportStatus: "Masuk untuk melaporkan status spot ini.", + logInToSuggestTags: "Masuk untuk menyarankan tag", + manageNip05ToClaim: "Kelola NIP-05 untuk Mengklaim", + meetAtSpotForPickup: "💡 Bertemu di spot ini untuk penjemputan yang aman", + memberOne: "{{count}} anggota", + memberOther: "{{count}} anggota", + messageFailed: "Pesan gagal", + messageMapper: "Pesan Pemeta", + messagePlaceholder: "Kirim pesan ke spot ini… (coba /me atau /who)", + messagesHiddenOne: "{{count}} pesan disembunyikan oleh filter kepercayaan Anda. Turunkan filter untuk melihat lebih banyak.", + messagesHiddenOther: "{{count}} pesan disembunyikan oleh filter kepercayaan Anda. Turunkan filter untuk melihat lebih banyak.", + messagesHiddenShortOne: "{{count}} pesan disembunyikan oleh filter kepercayaan Anda", + messagesHiddenShortOther: "{{count}} pesan disembunyikan oleh filter kepercayaan Anda", + metresAway: "{{distance}} m jauhnya", + moderatorVouchedDesc: "Moderator meninjau spot ini dan menjaminnya. Bagus.", + monthsAgo: "{{count}} bulan lalu", + monthsAgoPlural: "{{count}} bulan lalu", + newOwnerNpub: "npub Pemilik Baru", + newOwnerNpubHint: "Masukkan npub pengguna yang ingin Anda alihkan spot ini kepadanya.", + nip05RequiredToClaim: "⚠️ Verifikasi NIP-05 diperlukan untuk mengklaim toko", + noCommunitySignalTitle: "Belum ada foto komunitas atau laporan status — belum ada yang mengonfirmasi tempat ini.", + breakdownPhotos: "{{count}} foto", + breakdownStatus: "{{count}} laporan status", + breakdownComments: "{{count}} komentar", + breakdownReactions: "{{count}} reaksi", + breakdownCollections: "{{count}} simpanan", + breakdownZaps: "{{count}} Zap", + breakdownTags: "{{count}} saran tag", + breakdownCrews: "{{count}} Crew", + breakdownLab: "{{count}} tautan pro", + verifyNudgeTitle: "Jadilah yang pertama mengonfirmasi spot ini", + verifyNudgeBody: "Foto atau “Saya sudah skate di sini” adalah cara spot diverifikasi — bantu skater berikutnya.", + verifyNudgeStatus: "Saya sudah skate di sini", + communityChip: "Komunitas", + seenChip: "Terlihat", + noGearListedYet: "Belum ada gear yang dipasang", + noMessagesYet: "Belum ada pesan di saluran lokal ini. Sapa — \"ada yang skate malam ini?\"", + noPhoto: "Tidak ada foto", + noReportsYet: "Belum ada laporan", + noTags: "Tidak ada tag", + notASkateSpot: "Bukan spot skate", + offerServicesHere: "💡 Tawarkan layanan Anda di spot ini", + photoCaptured: "Foto diambil!", + photoCapturedDesc: "Foto Anda berhasil diunggah.", + photoContributed: "Foto dikontribusikan!", + photoContributedDesc: "Foto Anda telah ditambahkan ke spot ini.", + photosAdded: "Foto Anda telah ditambahkan.", + photosRecommended: "sangat disarankan — spot tanpa foto tetap ditandai Belum Diverifikasi", + photosUploaded: "{{count}} foto diunggah", + photoUploaded: "Foto diunggah", + photoUploadedDesc: "Tambahkan keterangan dan kirim untuk berkontribusi!", + photoUploadFailed: "Unggah foto gagal", + pleaseTryAgain: "Coba lagi", + public: "Publik", + publicChatTitle: "Siapa pun dapat membaca pesan di saluran ini — ini publik dan tidak terenkripsi.", + recentReports: "Laporan terbaru", + recipientRequired: "Penerima diperlukan", + recipientRequiredDesc: "Masukkan npub pemilik baru.", + removeAdmin: "Hapus (admin)", + removeSpot: "Hapus Spot", + removeSpotAdminTitle: "Hapus spot ini? (admin)", + reportOne: "laporan", + reportContent: "Laporkan Konten", + reportContentDesc: "Bantu menjaga komunitas tetap aman dengan melaporkan konten yang tidak pantas.", + reportedBySkaters: " oleh {{count}} skater — sedang ditinjau. Jika ini spot asli, tambahkan foto atau laporan status untuk mengonfirmasinya.", + reportedNotASpot: "Dilaporkan bukan spot skate", + reportingType: "Melaporkan {{type}}", + reports: "laporan", + reportShop: "Laporkan Toko", + reportSpot: "Laporkan Spot", + reportStatus: "Laporkan Status", + reportSubmitted: "Laporan dikirim", + reportSubmittedDesc: "Terima kasih telah membantu menjaga SkateSpots tetap aman.", + reportSubmittedLong: "Terima kasih telah membantu menjaga SkateSpots tetap aman dan akurat. Laporan Anda akan ditinjau oleh anggota komunitas terpercaya.", + reportSubmittedTitle: "Laporan Dikirim", + report: { + notASkateSpot: { + label: "Bukan spot skate", + description: "Entri uji coba, atau tempat yang sama sekali bukan untuk skate", + }, + fakeSpot: { + label: "Spot palsu/tidak ada", + description: "Spot ini tidak ada atau lokasinya salah", + }, + stolenPhotos: { + label: "Foto curian/palsu", + description: "Fotonya gambar stok atau dicuri dari tempat lain", + }, + spamAd: { + label: "Spam atau iklan", + description: "Konten promosi atau listing duplikat", + }, + dangerousLocation: { + label: "Lokasi berbahaya", + description: "Properti pribadi, tidak aman, atau ilegal untuk diakses", + }, + inappropriateContent: { + label: "Konten tidak pantas", + description: "Berisi konten menyinggung atau dewasa", + }, + impersonation: { + label: "Peniruan identitas", + description: "Seseorang yang berpura-pura menjadi orang lain", + }, + other: { + label: "Lainnya", + description: "Sesuatu yang tidak tercantum di atas", + }, + }, + targetType: { + spot: "Spot", + event: "Event", + tour: "Tur", + shop: "Toko", + user: "Pengguna", + listing: "Listing", + coach: "Coach", + filmer: "Filmer", + }, + sameOwner: "Pemilik yang sama", + sameOwnerDesc: "Tidak dapat mengalihkan ke pemilik saat ini.", + saveChanges: "Simpan Perubahan", + saving: "Menyimpan...", + services: "Layanan", + shareSpotText: "Lihat spot skate ini: {{title}}", + shelter: "Teduh", + shelterHint: "Apakah spot ini terpapar cuaca? Membantu skater menemukan spot kering saat hujan.", + shopClaimDesc: "Jika Anda memiliki atau mengelola toko ini, Anda dapat mengklaimnya untuk memverifikasi kepemilikan dan mengelola listing.", + shopClaimNip05Hint: "Untuk mengklaim toko ini, tambahkan pengenal NIP-05 yang cocok dengan domain situs web toko.", + skatersActiveDesc: "Orang yang memposting di saluran ini dalam 24 jam terakhir.", + skatersActiveOne: "{{count}} skater aktif di sini", + skatersActiveOther: "{{count}} skater aktif di sini", + skatersSellingGear: "Skater di spot ini menjual gear", + skateSpot: "Spot Skate", + somethingWentWrong: "Terjadi kesalahan", + spot: "Spot", + spotAdded: "Spot ditambahkan!", + spotAddedDesc: "Spot skate Anda telah diterbitkan ke jaringan.", + spotAddedNoPhoto: "Diterbitkan — dan ditandai Belum Diverifikasi sampai seseorang menambahkan foto. Foto spot sangat membantu.", + spotChat: "Chat Spot", + spotClaimed: "Spot diklaim!", + spotClaimedDesc: "Anda sekarang pemilik spot ini. Anda dapat mengeditnya dari profil Anda.", + spotDeleted: "Spot dihapus", + spotDeletedDesc: "Permintaan penghapusan dikirim ke Relay. Sebagian besar Relay akan menghapus konten ini.", + spotMayAlreadyBeOnMap: "Spot itu mungkin sudah ada di peta", + spotMayAlreadyExist: "Spot ini mungkin sudah ada", + spotMayBeAbandoned: "Spot Mungkin Terbengkalai", + spotPhotoAlt: "Spot", + spotRemoved: "Spot dihapus", + spotRemovedDesc: "Spot ini telah diturunkan dan akan disembunyikan di seluruh SkateSpots.", + spotSeoDesc: "Lihat spot skateboard ini di SkateSpots.", + spotStatus: "Status Spot", + spotStatusDesc: "Apakah \"{{title}}\" masih bisa di-skate? Beri tahu komunitas tentang kondisinya saat ini.", + spotTypeRequired: "Tipe spot diperlukan", + spotTypeRequiredDesc: "Pilih tipe spot agar skater tahu medan yang akan mereka hadapi.", + spotUpdated: "Spot diperbarui!", + spotUpdatedDesc: "Perubahan Anda telah diterbitkan ke jaringan.", + staffVerifiedTitle: "Admin SkateSpots meninjau dan menjamin spot ini.", + statusNotePlaceholder: "Opsional: tambahkan detail (mis. \"knob baru di Ledge\", \"satpam mengusir setelah jam 6 sore\")", + statusReported: "Status dilaporkan", + statusReportedDesc: "Terima kasih telah menjaga peta tetap baru. Laporan Anda sudah tayang.", + submitReport: "Kirim Laporan", + submitting: "Mengirim...", + suggestedByUser: "Disarankan oleh {{count}} pengguna", + suggestedByUsers: "Disarankan oleh {{count}} pengguna", + suggestedTagsContent: "Tag yang disarankan untuk {{title}}: {{tags}}", + suggestNTags: "Sarankan {{count}} Tag", + suggestOneTag: "Sarankan 1 Tag", + suggestTags: "Sarankan Tag", + suggestTagsDesc: "Bantu kategorikan spot ini dengan menyarankan tag yang relevan.", + tags: "Tag", + tagsHint: "Tambahkan tag untuk fitur, permukaan, suasana (maks {{max}})", + tagsSuggested: "Tag disarankan!", + tagsSuggestedDesc: "Saran tag Anda telah dikirim.", + takePhoto: "Ambil Foto", + threeDayForecast: "Prakiraan 3 Hari", + tipTheMapper: "Beri Tip Pemeta", + tipTheMapperDesc: "Merasa spot ini berguna? Kirim Zap untuk berterima kasih kepada pemeta!", + titleRequired: "Judul diperlukan", + titleRequiredDesc: "Masukkan nama untuk spot ini.", + today: "Hari ini", + tomorrow: "Besok", + transferDesc: "Alihkan \"{{title}}\" ke pengguna lain. Tindakan ini tidak dapat dibatalkan.", + transferFailed: "Pengalihan gagal", + transferOwnership: "Alihkan Kepemilikan", + transferRequestContent: "Permintaan pengalihan kepemilikan untuk spot \"{{title}}\"", + transferRequested: "Pengalihan diminta", + transferRequestedDesc: "Pemilik baru perlu mengklaim spot untuk menyelesaikan pengalihan.", + transferring: "Mengalihkan...", + transferSpotOwnership: "Alihkan Kepemilikan Spot", + transferWarningDesc: "Setelah dialihkan, Anda tidak akan lagi dapat mengedit atau menghapus spot ini.", + typeToSearchTags: "Ketik untuk mencari atau menambah tag...", + underReview: " — sedang ditinjau. Jika ini spot asli, tambahkan foto atau laporan status untuk mengonfirmasinya.", + untitledSpot: "Spot tanpa judul", + unverified: "Belum Diverifikasi", + updateDetailsFor: "Perbarui detail untuk {{title}}", + updateSpotDesc: "Perbarui informasi tentang spot ini. Semua kolom bertanda * wajib diisi.", + uploadAPhoto: "Unggah foto", + uploadAPhotoHint: "Seret & lepas atau klik · JPG, PNG, WebP", + uploadedAlt: "Diunggah", + uploadFailed: "Unggah gagal", + uploadingPhoto: "Mengunggah foto…", + uploadPhotoFirst: "Unggah foto terlebih dahulu.", + uvIndex: "Indeks UV", + verifiedBySkateSpots: "Diverifikasi oleh SkateSpots", + viewPhotoFullScreen: "Lihat foto layar penuh", + viewPhotoOf: "Lihat foto {{n}} dari {{total}}", + warning: "Peringatan", + weatherConditions: "Kondisi Cuaca", + weatherOnly: "hanya cuaca", + weatherOnlyUnconfirmed: "Hanya cuaca. Belum ada yang mengonfirmasi ini spot skate, jadi tidak ada skor kondisi — tambahkan foto atau laporan status untuk mengonfirmasinya.", + whyReporting: "Mengapa Anda melaporkan ini?", + wind: "Angin", + yearsAgo: "{{count}} tahun lalu", + yearsAgoPlural: "{{count}} tahun lalu", + }, + diyUi: { + title: "DIY — Buat Sendiri", + tagline: "Panduan, alat terbuka, dan rencana untuk membuat Deck, ramp, dan spot beton Anda sendiri — lalu temukan orang, tempat, dan pasar yang menyertainya.", + doItWithPeople: "Lakukan bersama orang lain", + backToDiy: "Kembali ke DIY", + calc: { + title: "Kalkulator biaya Deck", + intro: "Berapa biaya membuat Deck — tenaga kerja, peralatan, bahan, waktu proses, pengemasan, dan margin — serta harga jual yang wajar. Tersimpan di perangkat ini.", + }, + designer: { + title: "Desainer Deck", + intro: "Bentuk garis luar skateboard atau longboard, lalu ekspor templat 1:1 yang dapat dicetak, SVG, atau DXF untuk CNC. Tersimpan di perangkat ini.", + presets: "Preset", + dimensions: "Dimensi", + shape: "Bentuk", + kicks: "Kick", + hardware: "Lubang Trucks", + width: "Lebar maks", + wheelbase: "Wheelbase", + nose: "Panjang nose", + tail: "Panjang tail", + length: "Panjang total", + waist: "Pinggang", + endRound: "Kebulatan ujung", + concave: "Concave", + thickness: "Ketebalan", + tailKick: "Tail kick", + noseKick: "Nose kick", + holeNew: "New school (2.125″)", + holeOld: "Old school (2.5″)", + holeSpacing: "New school adalah 2.125″ × 1.625″ (54 × 41 mm); old school adalah 2.5″ × 1.625″. Lubang pemasangan 3/16″.", + topView: "Tampak atas", + sideView: "Profil samping", + concaveSection: "Potongan concave", + export: "Ekspor", + pdfA4: "PDF 1:1 · A4", + pdfLetter: "PDF 1:1 · Letter", + printNote: "Cetak PDF pada 100% (tanpa “sesuaikan ke halaman”), lalu rekatkan potongannya menggunakan tanda silang di sudut. SVG juga berukuran tepat.", + note: "Ini adalah garis luar 2D yang Anda jiplak dan potong. Untuk bentuk 3D lengkap dan desain cetakan, alat CAD sungguhan tetap pilihan terbaik.", + }, + source: "Sumber", + comingSoon: "Segera hadir", + footer: "Panduan langkah demi langkah sedang dalam perjalanan. Untuk sekarang: temukan orang yang membangun di The Lab, petakan spot Anda, dan beli atau jual di Marketplace. Bekerjalah dengan aman — pelindung, sarung tangan, dan pelindung mata.", + categories: { + boards: "Papan", + ramps: "Ramp & rintangan kayu", + concrete: "Beton & spot DIY", + repairs: "Perbaikan & penyetelan", + tools: "Alat & rencana", + }, + cards: { + ossBuild: { + title: "Bangun skateboard", + blurb: "Pembuatan Deck langkah demi langkah — veneer, cetakan, press, dan penyelesaian.", + }, + sk8cad: { + title: "SK8CAD", + blurb: "CAD open-source untuk bentuk Deck, concave, dan desain cetakan.", + }, + deckCost: { + title: "Biaya & harga Deck", + blurb: "Hitung bahan, tenaga kerja, dan harga jual yang wajar sebelum Anda membangun.", + }, + deckDesigner: { + title: "Desainer Deck", + blurb: "Bentuk garis luar dan cetak templat 1:1 — atau ekspor SVG/DXF untuk CNC.", + }, + ledgeBox: { + title: "Bangun Ledge atau box", + blurb: "Rintangan kayu ramah pemula yang bisa Anda bangun dalam akhir pekan.", + }, + quarterpipe: { + title: "Bangun quarterpipe", + blurb: "Rencana ramp, transisi, dan coping untuk mini di halaman belakang.", + }, + flatbar: { + title: "Bangun flatbar", + blurb: "Murah, portabel, dan cara terbaik untuk belajar Rail.", + }, + concreteBasics: { + title: "Dasar-dasar beton", + blurb: "Mencampur, membentuk, dan menyelesaikan Ledge atau bank yang tahan lama.", + }, + coping: { + title: "Coping & tepi", + blurb: "Cara memasang coping dan menyelesaikan transisi agar grind mulus.", + }, + buyParts: { + title: "Beli part & gear", + blurb: "Dapatkan Deck, hardware, dan alat dari penjual di Marketplace.", + }, + mapSpot: { + title: "Petakan spot DIY Anda", + blurb: "Sudah membangun sesuatu? Tambahkan ke peta agar orang lain bisa menemukan dan skate di sana.", + }, + regrip: { + title: "Ganti Griptape", + blurb: "Lepas Griptape lama dan pasang Griptape baru dengan rapi.", + }, + tune: { + title: "Setel Bearings & Trucks", + blurb: "Bersihkan Bearings, tukar bushing, dan atur geometri Trucks Anda.", + }, + printMolds: { + title: "Cetakan 3D-print", + blurb: "File cetakan dan basis penyelarasan yang dapat dicetak dari komunitas.", + }, + sk8cadTools: { + title: "Alat cetakan & penyelarasan", + blurb: "Desain cetakan dengan basis penyelarasan terpasang langsung.", + }, + }, + actions: { + findBuilder: { + title: "Temukan Pembangun", + blurb: "Pembangun ramp dan DIY di The Lab yang dapat merancang atau menuangkannya untuk Anda.", + }, + findCrew: { + title: "Temukan Crew DIY", + blurb: "Crew yang fokus membangun — bergabunglah dengan yang mengubah spot menjadi kenyataan.", + }, + mapSpot: { + title: "Petakan spot DIY", + blurb: "Tambahkan spot yang Anda bangun agar tetap ada di peta.", + }, + sellBuilds: { + title: "Jual hasil karya Anda", + blurb: "Pasang Deck, ramp, atau part yang Anda buat di Marketplace.", + }, + findCoach: { + title: "Temukan coach", + blurb: "Coach yang mengajarkan modul skate DIY dan pembangunan spot.", + }, + }, + }, + labelsUi: { + spotCategory: { + street: { + label: "Street", + description: "Spot temuan acak, medan urban", + }, + transition: { + label: "Transition", + description: "Permukaan melengkung/ramp", + }, + park: { + label: "Park", + description: "Skatepark yang dibangun", + }, + plaza: { + label: "Plaza", + description: "Plaza urban (seperti MACBA, Love Park)", + }, + }, + spotFeature: { + wallrides: "Wallrides", + stairs: "Tangga & Handrail", + rails: "Rail", + ledges: "Ledge & Curbs", + gaps: "Gaps", + flatground: "Flatground", + "manual-pads": "Manual Pads", + "half-pipes": "Half Pipe", + "quarter-pipes": "Quarter Pipe", + "mini-ramps": "Mini Ramp", + bowls: "Bowl", + vert: "Vert Ramp", + "mega-ramps": "Mega Ramp", + hubbas: "Hubba", + "euro-gaps": "Euro Gap", + banks: "Bank", + "spine-ramps": "Spine Ramp", + "roll-ins": "Roll-in", + hips: "Hip", + volcano: "Volcano", + pyramids: "Pyramid / Funbox", + "snake-runs": "Snake Run", + "pump-track": "Pump Track Roller", + "flat-bars": "Flat Bar", + }, + spotType: { + street: "Street", + transition: "Transition", + park: "Park", + plaza: "Plaza", + wallrides: "Wallrides", + stairs: "Tangga & Handrail", + rails: "Rail", + ledges: "Ledge & Curbs", + gaps: "Gaps", + flatground: "Flatground", + "manual-pads": "Manual Pads", + "half-pipes": "Half Pipe", + "quarter-pipes": "Quarter Pipe", + "mini-ramps": "Mini Ramp", + bowls: "Bowl", + vert: "Vert Ramp", + "mega-ramps": "Mega Ramp", + hubbas: "Hubba", + "euro-gaps": "Euro Gap", + banks: "Bank", + "spine-ramps": "Spine Ramp", + "roll-ins": "Roll-in", + hips: "Hip", + volcano: "Volcano", + pyramids: "Pyramid / Funbox", + "snake-runs": "Snake Run", + "pump-track": "Pump Track Roller", + "flat-bars": "Flat Bar", + diy: "DIY", + rail: "Rail", + ledge: "Ledge", + gap: "Gap", + bowl: "Bowl", + stall: "Stall", + slappy: "Slappy", + }, + access: { + public: { + label: "Publik - Terbuka untuk Semua", + }, + private: { + label: "Properti Pribadi - Perlu Izin", + }, + locals: { + label: "Tanya Warga Lokal Dulu", + }, + }, + shelter: { + outdoor: { + label: "Outdoor", + short: "Outdoor", + description: "Sepenuhnya terpapar — hujan menghentikan permainan", + }, + partial: { + label: "Sebagian tertutup", + short: "Sebagian tertutup", + description: "Beberapa rintangan tetap kering", + }, + covered: { + label: "Tertutup / beratap", + short: "Tertutup", + description: "Di luar tapi di bawah atap", + }, + indoor: { + label: "Indoor", + short: "Indoor", + description: "Tertutup sepenuhnya — skate hujan atau cerah", + }, + }, + eventType: { + contest: "Kontes", + demo: "Demo", + session: "Sesi", + workshop: "Lokakarya", + premiere: "Premiere", + tradeshow: "Pameran Dagang", + gameskate: "Game of Skate", + concert: "🎸 Konser", + jam: "🎵 Jam", + festival: "🎪 Festival", + popup: "🎯 Pop-Up", + }, + gearCategory: { + deck: "Deck", + trucks: "Trucks", + wheels: "Wheels", + bearings: "Bearings", + shoes: "Sepatu Skate", + clothing: "Pakaian", + protective: "Pelindung", + stickers: "Stiker", + wax: "Wax", + tools: "Alat", + griptape: "Griptape", + rubbrick: "Rub Brick", + }, + gearCondition: { + new: { + label: "Baru", + description: "Belum pernah dipakai, masih dalam kemasan", + }, + like_new: { + label: "Seperti Baru", + description: "Jarang dipakai, kondisi sangat baik", + }, + good: { + label: "Bagus", + description: "Aus normal, berfungsi sempurna", + }, + well_used: { + label: "Banyak Dipakai", + description: "Terlihat aus tapi masih berfungsi", + }, + }, + priceType: { + fixed: { + label: "Harga Tetap", + description: "Harga ditetapkan dalam USD atau sats", + }, + free: { + label: "Gratis", + description: "Diberikan cuma-cuma", + }, + trade: { + label: "Tukar", + description: "Ingin bertukar", + }, + offer: { + label: "Ajukan Penawaran", + description: "Harga bisa dinegosiasikan", + }, + }, + listingType: { + selling: { + label: "Menjual", + description: "Memasang gear untuk dijual", + }, + wtb: { + label: "Ingin Membeli", + description: "Mencari gear tertentu", + }, + }, + tour: { + spotType: { + street: "Street", + park: "Park", + diy: "DIY", + transition: "Transition", + hidden: "Permata Tersembunyi", + }, + category: { + local: { + label: "Tur Lokal", + description: "Tunjukkan spot tersembunyi di kota Anda", + }, + national: { + label: "Tur Nasional", + description: "Perjalanan darat multi-kota di seluruh negeri", + }, + international: { + label: "Tur Internasional", + description: "Petualangan lintas batas di beberapa negara", + }, + destruction: { + label: "World Destruction", + description: "Kompetisi tim global gaya KOTR", + }, + }, + }, + crew: { + vibe: { + street: "Street", + transition: "Transition / Vert", + park: "Park", + diy: "DIY", + cruising: "Cruising / Syuting", + oldschool: "Old School", + allterrain: "All Terrain", + girls: "Girl / Woman", + youth: "Anak Muda / Groms", + adaptive: "Adaptif", + punk: "Punk", + hiphop: "Rap / Hip-Hop", + }, + focus: { + mixed: "Campuran / Umum", + builder: "DIY & Pembangun", + photo: "Foto & Film", + coaching: "Coaching", + art: "Seni & Desain", + music: "Band & Musik", + wellness: "Latihan & Fisio", + }, + focusDescription: { + mixed: "Crew skate biasa — hanya tampil di halaman Crew.", + builder: "Crew DIY / pembangun park — juga tampil di The Lab di bawah Pembangun.", + photo: "Crew syuting, fotografi, atau penyuntingan — juga tampil di The Lab di bawah Foto & Film.", + coaching: "Crew coaching / les — juga tampil di The Lab di bawah Coaching.", + art: "Kolektif seni, desain, graffiti, atau tato — juga tampil di The Lab di bawah Seni & Desain.", + music: "Band atau kolektif musik — juga tampil di The Lab di bawah Musik.", + wellness: "Crew latihan, kebugaran, atau fisio — juga tampil di The Lab di bawah Latihan.", + }, + lookingFor: { + filmer: "Filmer", + photographer: "Fotografer", + editor: "Editor Video", + coach: "Coach", + builder: "Pembangun Ramp", + artist: "Artis / Desainer", + musician: "Musisi / Band", + members: "Anggota Baru", + }, + role: { + filmer: "Filmer", + photographer: "Fotografer", + editor: "Editor", + coach: "Coach", + builder: "Pembangun", + artist: "Artis", + graffiti: "Graffiti", + tattoo: "Tato", + trainer: "Pelatih", + musician: "Musisi", + judge: "Juri", + manager: "Manajer Tim", + og: "OG", + }, + }, + memberVisibility: { + public: { + label: "Publik", + description: "Siapa pun dapat melihat Anda di crew ini — di halaman crew publik dan di penemuan rekan crew.", + }, + crew: { + label: "Hanya Crew", + description: "Hanya rekan crew yang terkonfirmasi dan pendiri yang melihat Anda di sini. Bagi orang lain, Anda muncul sebagai “anggota tersembunyi” anonim. Catatan: ini privasi tingkat aplikasi — tag keanggotaan Anda tetap ada secara publik di Relay, hanya saja tidak pernah ditampilkan kepada orang luar.", + }, + }, + tagCategory: { + features: { + name: "Fitur", + description: "Rintangan dan medan", + }, + surfaces: { + name: "Permukaan", + description: "Bahan dan tekstur", + }, + sizes: { + name: "Ukuran", + description: "Dimensi dan skala", + }, + stairs: { + name: "Jumlah Tangga", + description: "Jumlah anak tangga", + }, + vibes: { + name: "Suasana", + description: "Atmosfer dan kondisi", + }, + location: { + name: "Lokasi", + description: "Konteks lokasi", + }, + tricks: { + name: "Trick", + description: "Bagus untuk trick tertentu", + }, + }, + spotTagCategory: { + street: { + label: "Street", + description: "Spot jalanan - tangga, Rail, Ledge", + }, + park: { + label: "Park", + description: "Skatepark - publik atau privat", + }, + diy: { + label: "DIY", + description: "Spot DIY/buatan sendiri", + }, + plaza: { + label: "Plaza", + description: "Plaza publik dengan arsitektur ramah skate", + }, + }, + status: { + active: { + label: "Aktif", + description: "Siap dipakai — skate saja.", + }, + bust: { + label: "Bust", + description: "Risiko diusir tinggi — satpam atau polisi.", + }, + skate_stopped: { + label: "Skate-stopped", + description: "Dipasangi knob / ditutup, tapi sebagian masih bisa di-skate.", + }, + closed: { + label: "Ditutup", + description: "Sementara ditutup — konstruksi atau event.", + }, + gone: { + label: "Hilang", + description: "Dibongkar, dilapisi aspal, atau dipagari permanen.", + }, + }, + price: { + free: "GRATIS", + trade: "Tukar", + makeOffer: "Ajukan Penawaran", + offer: "Penawaran", + }, + }, + feesUi: { + feeFeaturedEventLabel: "Event Unggulan", + feeFeaturedEventDesc: "Tonjolkan event Anda di SkateSpots", + feeFeaturedEventBenefit: "Event Anda muncul di bagian atas halaman event", + feeLabProfileLabel: "Profil Pro Lab", + feeLabProfileDesc: "Tonjolkan layanan Anda di The Lab", + feeLabProfileBenefit: "Lencana Pro + penempatan unggulan saat skater menelusuri The Lab", + feeFeaturedShopLabel: "Toko Unggulan", + feeFeaturedShopDesc: "Tonjolkan toko skate Anda di peta dan direktori", + feeFeaturedShopBenefit: "Lencana terverifikasi + pin unggulan di peta", + feeFeaturedTourLabel: "Tur Unggulan", + feeFeaturedTourDesc: "Tonjolkan tur Anda di SkateSpots", + feeFeaturedTourBenefit: "Lencana Pro + penempatan teratas saat skater menelusuri tur", + duration7d: "7 hari", + duration30d: "1 bulan", + duration90d: "3 bulan", + duration365d: "12 bulan", + metaActive: "{{label}} — Aktif", + daysRemainingOne: "{{count}} hari tersisa", + daysRemainingMany: "{{count}} hari tersisa", + zapRequestContent: "SkateSpots {{label}} ({{tier}})", + errGenerate: "Gagal membuat invoice", + paymentReceived: "⚡ Pembayaran diterima!", + paymentReceivedDesc: "{{amount}} sats — {{label}} kini aktif.", + autoPayFailed: "Pembayaran otomatis gagal", + autoPayFailedDesc: "Bayar secara manual menggunakan QR atau invoice di bawah.", + payStatusUnknown: "Status pembayaran tidak diketahui — pembayaran mungkin sudah berhasil. Periksa dompet Anda sebelum membayar lagi.", + invoiceCopied: "Invoice disalin!", + activeBang: "{{label}} Aktif!", + chooseDuration: "Pilih durasi", + bestValue: "Nilai terbaik", + perDay: "{{price}}/hari", + validFor: "Berlaku selama", + amountLine: "~${{usd}} USD · ke {{name}} · {{tier}}", + payToContinue: "Bayar {{amount}} sats untuk Lanjut", + generating: "Membuat invoice…", + processing: "Memproses pembayaran…", + invoiceQrAlt: "QR invoice Lightning", + copyInvoice: "Salin Invoice", + openWallet: "Buka Dompet", + payConnected: "Bayar dengan Dompet Terhubung", + scanAny: "Pindai dengan dompet Lightning apa pun", + tryAgain: "Coba Lagi", + proReceiptTitle: "🦧⚡ Sasquatch Pro — Anda masuk!", + proReceiptPass: "Pass: {{pass}} ({{sats}} sats)", + proReceiptActiveUntil: "Aktif sampai: {{until}}", + proReceiptUnlocked: "Yang Anda buka:", + proReceiptBullet1: "• Asisten pribadi — saya membaca Stash, Crew, spot & listing Anda", + proReceiptBullet2: "• Draf aksi — pasang gear, posting status spot, rencanakan perjalanan (Anda konfirmasi)", + proReceiptBullet3: "• Jawaban yang memakai konteks pribadi Anda, bukan hanya data publik", + proReceiptBullet4: "• ⚡ Anda langsung mendukung SkateSpots & menjaganya gratis + tanpa iklan", + proReceiptThanks: "Terima kasih telah menjaga SkateSpots gratis & tanpa iklan. Sekarang ayo skate. 🛹", + proReceiptSubject: "Kwitansi Sasquatch Pro", + receiptContent: "Sasquatch Pro — pass pendukung {{tier}} 🦧⚡", + receiptAlt: "Pass pendukung Sasquatch Pro ({{tier}}), berlaku sampai {{until}}", + purchaseComment: "Sasquatch Pro — {{tier}} 🦧", + errLogin: "Masuk untuk meningkatkan ke Pro.", + errStart: "Tidak dapat memulai pembelian.", + errRecord: "Tidak dapat mencatat pass Anda.", + }, + cardUi: { + save: "Simpan kartu ke Nostr", + saved: "Kartu disimpan", + savedDesc: "Kartu Anda kini ditandatangani dan dapat diverifikasi.", + saveFailed: "Tidak dapat menyimpan kartu", + notPublished: "Belum diterbitkan", + titleNeon: "Rider", + titleRest: "Kartu", + saveFrontPng: "Simpan sisi depan (PNG)", + expired: "KEDALUWARSA", + logoUploaded: "Logo diunggah", + logoUploadFailed: "Tidak dapat mengunggah logo", + venue: "Venue tertaut (opsional)", + venueNone: "Tanpa venue", + venueHint: "Pilih salah satu spot milik Anda untuk menautkan pass ini ke venue. Verifikator akan mengonfirmasi bahwa Anda memilikinya.", + venuePick: "Pilih venue Anda", + parkNoVenue: "Pass Park hanya dapat diterbitkan oleh pemilik venue — petakan dulu spot yang Anda miliki.", + parkAddVenue: "Tambah spot", + parkNeedsVenue: "Pilih venue yang Anda miliki", + parkIssued: "Pass yang diterbitkan", + parkRevoke: "Cabut", + parkRevoked: "Dicabut", + parkRevokeFailed: "Tidak dapat mencabut", + v: { + valid: "Valid", + validDesc: "Tanda tangan valid dan diterbitkan oleh venue.", + expired: "Kedaluwarsa", + expiredDesc: "Melewati tanggal berlakunya.", + revoked: "Dicabut", + revokedDesc: "Penerbit membatalkan pass ini — jangan terima.", + invalid: "Tidak valid", + invalidDesc: "Tanda tangannya tidak terverifikasi. Jangan percaya.", + notFound: "Tidak ditemukan", + notFoundDesc: "Tidak ada catatan yang cocok di Relay.", + unverifiedIssuer: "Penerbit tidak terverifikasi", + unverifiedIssuerDesc: "Pass ini menyebut venue yang tidak dimiliki oleh kunci penerbit.", + notBound: "Tidak tertaut", + notBoundDesc: "Tidak tertaut ke venue — tidak membuktikan apa pun tentang akses.", + noRsvp: "Tanpa RSVP", + noRsvpDesc: "Pemegang tidak memiliki RSVP tercatat untuk event ini.", + admitted: "Diterima", + admittedDesc: "Event penyelenggara + pemegang melakukan RSVP.", + noHolder: "Tidak ada pemegang di tautan", + noHolderDesc: "QR ini tidak memiliki pemegang tiket (`?h=`), jadi pemegangnya tidak dapat diperiksa.", + }, + passes: { + tab: "Pass saya", + pass: "Pass akses", + none: "Belum ada pass. Saat venue atau penyelenggara menerbitkan untuk Anda, pass muncul di sini.", + }, + facets: { + title: "Tampilkan aspek identitas", + crews: "Crew", + local: "Lokal", + roles: "Peran Lab", + }, + roles: { + coach: "Coach", + filmer: "Filmer", + editor: "Editor", + photographer: "Fotografer", + builder: "Pembangun", + artist: "Artis", + graffiti: "Graffiti", + tattoo: "Tato", + trainer: "Pelatih", + musician: "Musisi", + judge: "Juri", + organizer: "Penyelenggara", + barber: "Barber", + }, + crew: { + crewCard: "KARTU CREW", + crewSub: "Crew Anda, dalam sebuah kartu", + pick: "Pilih crew", + none: "Anda belum berada di crew mana pun — bergabung atau buat dulu.", + hint: "Kartu dibangun dari data bertanda tangan milik crew sendiri. Edit crew di halamannya untuk mengubahnya.", + members: "ANGGOTA", + spots: "SPOT", + est: "Berdiri {{year}}", + openCall: "Panggilan terbuka", + verifiedCrew: "Crew terverifikasi", + viewCrew: "Lihat crew", + }, + event: { + pass: "PASS EVENT", + passSub: "Pass untuk event yang akan Anda hadiri", + pick: "Pilih event", + none: "Belum ada event — buat dulu, atau RSVP ke salah satunya.", + hint: "Pass dibangun dari data bertanda tangan milik event sendiri. Hanya penyelenggara yang dapat mengubahnya.", + admits: "UNTUK", + going: "{{count}} hadir", + verifiedEvent: "Event terverifikasi", + viewEvent: "Lihat event", + issuePass: "Terbitkan pass check-in", + issuePassBtn: "Terbitkan pass", + issuePassHint: "Pass bertanda tangan untuk peserta tertentu — mereka menunjukkannya di pintu.", + notOrganiser: "Hanya penyelenggara yang dapat menerbitkan pass", + passIssued: "Pass diterbitkan", + issueFailed: "Tidak dapat menerbitkan pass", + issuedPasses: "Pass check-in yang diterbitkan", + }, + studio: { + unsaved: "Perubahan belum disimpan", + saved: "Tersimpan", + saveChanges: "Simpan perubahan", + allSaved: "Tersimpan — terkini", + showOnCard: "Tampilkan di kartu", + derived: "Dari profil Skater Anda", + noSkaterProfile: "Belum ada profil Skater —", + editSkaterProfile: "tambahkan gaya & level Anda", + noPhoto: "Belum ada foto profil —", + addPhoto: "tambahkan di profil Anda", + finishTitle: "Selesaikan kartu Anda", + finishDesc: "Foto dan profil Skater membuatnya tampak nyata.", + checkPhoto: "Foto profil", + checkName: "Nama tampilan", + checkProfile: "Gaya & level", + checkCrew: "Bergabung dengan crew", + moreTypes: "Lebih banyak jenis kartu terbuka saat Anda memetakan spot yang Anda miliki, bergabung dengan crew, atau RSVP ke event.", + accent: "Warna aksen", + accentHint: "Menggantikan aksen tema", + accentClear: "Gunakan warna tema", + logo: "Logo / lambang kustom", + logoAdd: "Unggah", + logoChange: "Ganti", + logoClear: "Hapus", + }, + back: { + title: "Sisi belakang yang dapat dicetak", + desc: "Crew, peran, sponsor & tautan di sisi sebaliknya", + showBack: "Tampilkan belakang", + showFront: "Tampilkan depan", + empty: "Belum ada apa pun di sini — tambahkan crew, peran, atau sponsor.", + }, + verify: { + checking: "Memeriksa kartu…", + notFound: "Kartu tidak ditemukan", + notFoundDesc: "Tidak ada event yang cocok ditemukan di Relay. Mungkin telah dihapus, atau tautannya salah.", + invalid: "Tanda tangan tidak valid", + invalidDesc: "Event ini ada tetapi tanda tangannya tidak terverifikasi. Jangan percaya.", + authentic: "Asli", + authenticDesc: "Tanda tangan penerbit valid.", + kind: "Jenis", + kindPark: "Kartu Akses Park", + kindRider: "Kartu Rider", + kindCrew: "Kartu Crew", + kindEvent: "Pass event", + organiser: "Penyelenggara", + expired: "Kedaluwarsa", + valid: "Valid", + holder: "Pemegang", + ticketHolder: "Pemegang tiket", + rsvp: "RSVP", + rsvpGoing: "Hadir", + rsvpInterested: "Tertarik", + rsvpNone: "Tidak ada RSVP ditemukan", + revoked: "Pass dicabut", + revokedDesc: "Penerbit membatalkan pass ini — jangan terima.", + issuedBy: "Diterbitkan oleh", + accessLevel: "Tingkat akses", + validThru: "Berlaku hingga", + selfIssued: "Status", + selfIssuedDesc: "Kartu identitas yang diterbitkan sendiri", + venue: "Venue", + venueVerified: "Terverifikasi — kunci pemilik venue ini cocok dengan penerbit.", + venueMismatch: "Pass ini menyebut venue yang tidak dimiliki oleh kunci penerbit.", + venueNone: "Tidak tertaut ke venue.", + viewCard: "Lihat kartu", + disclaimer: "Tanda tangan yang valid membuktikan siapa yang menandatangani kartu ini — ini bukan bukti keterampilan atau hak akses di luar yang diterbitkan venue.", + details: "Detail", + invalidLink: "Tautan tidak valid", + invalidLinkDesc: "Itu sepertinya bukan tautan kartu yang valid.", + }, + public: { + invalid: "Itu sepertinya bukan tautan kartu yang valid.", + createYourOwn: "Buat kartu Anda sendiri", + editYourCard: "Edit kartu Anda", + backToEditor: "Kembali ke editor", + backHome: "Kembali ke beranda", + notCustomised: "Skater ini belum menyesuaikan kartunya — ini tampilan bawaan.", + verifyNote: "Pindai QR di kartu untuk memverifikasinya.", + }, + }, + routeUi: { + destination: "Tujuan", + routeTo: "Rute ke {{label}}", + routeToLabel: "Rute ke", + search: "Cari", + description: "Opsi rute dan petunjuk arah dalam aplikasi.", + routeMapAria: "Peta rute", + findingLocation: "Mencari lokasi Anda…", + plottingRoute: "Merencanakan rute Anda…", + refiningLocation: "Menyempurnakan lokasi…", + offlineSavedRoute: "Offline · rute tersimpan {{age}}", + tapMapStart: "Ketuk peta untuk menetapkan titik awal Anda", + fitRouteAria: "Muat seluruh rute di peta", + wholeRoute: "Seluruh rute", + next: "Berikutnya", + nextStep: "Berikutnya · langkah {{n}}", + followTheLine: "Ikuti garisnya", + toTheTurn: "ke belokan", + toGo: "tersisa", + tryAgain: "Coba lagi", + mode: { + foot: "Skate / Jalan", + bike: "Sepeda", + moto: "Moto", + car: "Mobil", + transit: "Transit", + }, + from: "Dari", + myLocation: "Lokasi saya", + tapTheMap: "Ketuk peta…", + chooseOnMap: "Pilih di peta", + direct: "langsung", + transferOne: "1 transit", + transfers: "{{count}} transit", + options: "{{count}} opsi", + ride: "naik", + arrive: "tiba", + speedAvg: "rata-rata {{speed}} km/j", + stepsCount: "{{count}} langkah", + onABoard: "dengan papan", + usesDrivingRoads: "menggunakan jalan raya", + drivingEstimate: "perkiraan berkendara", + updating: "memperbarui…", + pickMode: "Pilih mode untuk melihat rute Anda.", + waitingLocation: "Menunggu lokasi Anda…", + routeSteps: "Langkah rute", + walkingRoute: "rute jalan kaki — lebih cepat dengan papan", + planningView: "Tampilan perencanaan — ketuk Mulai untuk mengikuti dengan belokan langsung, suara, dan kedatangan.", + leaveNow: "Berangkat sekarang", + departAt: "Berangkat pukul", + arriveBy: "Tiba paling lambat", + departureTime: "Waktu keberangkatan", + arrivalTime: "Waktu kedatangan", + only: "Hanya", + clear: "hapus", + itinerary: "Itinerari", + group: { + bus: "Bus", + tram: "Trem", + metro: "Metro", + train: "Kereta", + ferry: "Feri", + }, + walk: "Jalan", + rideVerb: "Naik", + walkLower: "jalan", + rideLower: "naik", + toStop: "ke", + track: "jalur {{track}}", + stopOne: "1 perhentian", + stopsCount: "{{count}} perhentian", + tickets: "tiket ↗", + done: "Selesai", + stop: "Perhentian", + start: "Mulai", + arrived: "Anda telah tiba. 🛹", + voiceOnNote: "Layar tetap menyala · suara aktif — belokan dan kedatangan diucapkan.", + voiceOffNote: "Layar tetap menyala · suara nonaktif.", + followNote: "Belokan, suara, dan kedatangan saat Anda melaju. Menjaga layar tetap menyala.", + voiceOffAria: "Matikan panduan suara", + voiceOnAria: "Nyalakan panduan suara", + voiceStart: "Memulai navigasi", + voiceArrived: "Anda telah tiba", + voiceIn: "Dalam {{metres}} meter, {{instruction}}", + voiceContinue: "lanjutkan", + voiceContinueCaps: "Lanjutkan", + errPermissionDenied: "Izin lokasi ditolak.", + errWaitingGps: "Menunggu titik GPS…", + errPermissionDeniedLong: "Izin lokasi ditolak. Aktifkan lokasi untuk membuat rute dari tempat Anda.", + errNoLocation: "Tidak dapat memperoleh lokasi Anda. Coba lagi.", + errNoLocationShort: "Tidak dapat memperoleh lokasi Anda.", + errTransitNoRouteFiltered: "Tidak ada rute untuk waktu atau moda transportasi itu — coba waktu lain, atau sertakan lebih banyak moda.", + errTransitNoRoute: "Tidak ada rute transportasi umum yang ditemukan di sini — area ini mungkin tidak menerbitkan jadwal terbuka.", + errTransitUnreachable: "Tidak dapat menjangkau layanan transit. Periksa koneksi Anda dan coba lagi.", + errRoutingBusy: "Layanan perutean sedang sibuk saat ini — coba lagi sebentar.", + errNoRouteMode: "Tidak ada rute untuk mode ini — tujuan mungkin di luar jaringan jalan. Coba mode lain.", + errRoutingUnreachable: "Tidak dapat menjangkau layanan perutean. Periksa koneksi Anda dan coba lagi.", + departures: "Keberangkatan", + upcomingFrom: "Keberangkatan mendatang dari {{stop}}", + loadingDepartures: "Memuat keberangkatan…", + noDepartures: "Tidak ada keberangkatan mendatang di perhentian ini.", + live: "langsung", + cancelled: "dibatalkan", + refresh: "Muat ulang", + tripLoginTitle: "Masuk untuk menyimpan", + tripLoginDesc: "Masuk untuk menyimpan perjalanan ini sebagai Koleksi.", + tripCollectionTitle: "Perjalanan skate {{destination}} 🛹", + tripCollectionDesc: "Rencana perjalanan oleh The Sasquatch — {{count}} hari di {{destination}}.", + tripCollectionDescOne: "Rencana perjalanan oleh The Sasquatch — {{count}} hari di {{destination}}.", + tripSavedTitle: "Disimpan ke Koleksi 🦧", + tripSavedDesc: "Perjalanan {{destination}} Anda telah ditandai.", + tripSaveFailed: "Tidak dapat menyimpan", + tripSaveFailedDesc: "Coba lagi sebentar.", + daysInDestinationOne: "{{count}} hari di {{destination}}", + daysInDestination: "{{count}} hari di {{destination}}", + wetForecast: "Prakiraan hujan — hubungi Crew lokal untuk opsi tertutup/indoor.", + dayLabel: "Hari {{n}}", + freeSkate: "Skate bebas — jelajah & rekam. 🎥", + tapToBook: "ketuk untuk memesan / Zap ⚡", + localCrews: "Crew lokal", + saving: "Menyimpan…", + savedToCollections: "Disimpan ke Koleksi", + saveSpotOne: "Simpan {{count}} spot ke Koleksi", + saveSpots: "Simpan {{count}} spot ke Koleksi", + flights: "Penerbangan", + stays: "Penginapan", + gettingAround: "Berkeliling", + noMiddleman: "Saya merencanakan skating-nya — penerbangan & penginapan dibuka di situs aslinya (tanpa KYC, tanpa perantara).", + ageJustNow: "baru saja", + ageMinAgo: "{{count}} mnt lalu", + ageHourAgo: "{{count}} j lalu", + ageDayAgo: "{{count}} hr lalu", + skateRightHere: "di sini juga", + skateMin: "~{{count}} mnt meluncur", + skateHours: "~{{hours}} jam meluncur", + maneuver: { + headOut: "Berangkat", + arrive: "Tiba di spot", + continueStraight: "Lanjutkan lurus", + bearLeft: "Agak ke kiri", + bearRight: "Agak ke kanan", + turnLeft: "Belok kiri", + turnRight: "Belok kanan", + sharpLeft: "Belok tajam ke kiri", + sharpRight: "Belok tajam ke kanan", + turn: "Belok", + keepLeft: "Tetap di kiri", + keepRight: "Tetap di kanan", + takeFork: "Ambil pertigaan", + merge: "Bergabung", + roundabout: "Ambil bundaran", + takeRamp: "Ambil ramp", + takeExit: "Ambil jalan keluar", + }, + maneuverOnto: "{{instruction}} menuju {{road}}", + }, + sasquatchUi: { + live: "langsung", + offline: "offline", + genericTitle: "Asisten SkateSpots 🦧", + genericGreeting: "Yo! Saya The Sasquatch. Tanyakan apa saja tentang spot, event, coach, gear, atau cara kerja aplikasinya. Saya punya data langsung dari Relay SkateSpots!", + q1: "Rencanakan saya 3 hari di Lisbon", + q2: "Cari spot di dekat saya", + q3: "Ada event mendatang?", + q4: "Apa itu Crew?", + q5: "Bagaimana cara kerja Zap?", + q6: "Apa itu Nostr?", + q7: "Apa itu Stash Saya?", + q8: "Apakah ini gratis?", + bubbleTitle: "Tekan dan seret untuk memindahkan · Ketuk untuk membuka", + openGuideAria: "Buka panduan Sasquatch", + hideAria: "Sembunyikan asisten Sasquatch", + hide: "Sembunyikan asisten", + showAria: "Tampilkan asisten Sasquatch", + activeUntil: "Aktif sampai {{date}}", + platformOwner: "Pemilik platform", + upgradeTitle: "Tingkatkan ke Sasquatch Pro", + goPro: "Go Pro", + goProBlurb: "AI pribadi · mulai 2k sats", + aiBalanceTitle: "Saldo kredit AI Sasquatch (hanya pemilik) — isi ulang di {{provider}}", + aiChip: "⚡ AI {{balance}}", + minimizeToBubbleAria: "Perkecil ke gelembung", + minimize: "Perkecil", + closePanelAria: "Tutup panel", + close: "Tutup", + askLab: "Tanya tentang Coaching & Syuting", + askMap: "Tanya tentang Spot, Toko & Gear", + askAnything: "Tanyakan apa saja 🛹", + quickQuestions: "Pertanyaan cepat:", + you: "🧑 Anda", + thinking: "berpikir...", + inputPlaceholder: "Tanya tentang spot, event, coach...", + liveDataFrom: "Data langsung dari", + nostrRelays: "Relay Nostr", + clear: "hapus", + gettingLocation: "📍 Mengambil lokasi Anda…", + findingClosest: "🔍 Mencari spot terdekat…", + checkingLive: "🔍 Memeriksa data langsung…", + planningTrip: "🗺️ Merencanakan perjalanan {{destination}} Anda...", + searchingRelays: "🔍 Mencari {{tool}} di Relay...", + perk1: "Asisten pribadi — Sasquatch membaca Stash, Crew, spot & listing Anda sendiri", + perk2: "Draf aksi: pasang gear, posting status skate, rencanakan perjalanan — Anda konfirmasi sebelum apa pun terbit", + perk3: "Jawaban memakai konteks pribadi Anda, bukan hanya data publik", + perk4: "⚡ Dukung langsung SkateSpots & jaga tetap gratis dan tanpa iklan", + welcomeTitle: "Terima kasih telah mendukung Sasquatch Pro! 🦧⚡", + welcomeDesc: "Pembayaran terkirim — pass Anda aktif setelah penyedia mengonfirmasinya (biasanya dalam semenit). Terima kasih telah menjaga jalanan tetap bebas.", + invoiceCopied: "Invoice disalin", + dialogDesc: "Tingkatkan panduan skate AI Anda. 100% mendanai aplikasi komunitas gratis tanpa iklan.", + proSupporter: "Anda pendukung Pro ⚡", + extendPrompt: "Ingin memperpanjang? Pilih tingkatan di bawah untuk menambah waktu.", + scanToPayPre: "Pindai untuk membayar", + scanToPayAmount: "{{sats}} sats", + scanToPayPost: "untuk {{label}} Pro", + invoiceQrAlt: "QR invoice Lightning", + copyInvoice: "Salin invoice", + ivePaid: "Saya sudah bayar", + ivePaidHint: "Ketuk \"Saya sudah bayar\" setelah dompet Anda mengonfirmasi — ini mencatat pass Anda ke identitas Nostr Anda.", + freeStaysPre: "Sasquatch gratis tetap gratis — pencarian spot/event/coach publik, perencanaan perjalanan + glosarium trick lengkap. Pro menambahkan lapisan ", + freeStaysEmphasis: "personal + action", + freeStaysPost: ".", + loginFirst: "Masuk dulu untuk meningkatkan.", + paysTo: "Membayar ke", + overLightning: "lewat Lightning. Terikat ke npub Anda.", + popular: "Populer", + sats: "sats", + extend: "Perpanjang", + done: "Selesai!", + cancelledNothing: "Dibatalkan — tidak ada yang diterbitkan.", + draftReview: "Draf — tinjau & konfirmasi", + statusTextPlaceholder: "Teks status", + titlePlaceholder: "Judul", + priceSatsPlaceholder: "Harga (sats)", + conditionPlaceholder: "Kondisi", + cancel: "Batal", + aiTitle: "Sasquatch AI", + owner: "Pemilik", + notConfigured: "belum dikonfigurasi", + unavailable: "tidak tersedia", + satsValue: "{{balance}} sats", + theNode: "node", + lowBalance: "Saldo menipis — isi ulang di {{provider}} atau AI akan beralih ke penyedia tanpa kunci.", + aiDesc: "AI bayar-per-permintaan, didanai dalam sats via Routstr. Isi ulang otomatis saat saldo menipis.", + tier7d: "7 hari", + tier1m: "1 bulan", + tier3m: "3 bulan", + tier1y: "1 tahun", + badgeTry: "Coba", + badgeOff20: "Diskon 20%", + badgeBest: "Nilai terbaik · diskon 40%", + draftPostStatusTitle: "Posting status skate", + draftAutoExpires: "Otomatis kedaluwarsa dalam {{count}} mnt", + draftPostStatusCta: "Posting status", + draftCategory: "Kategori: {{value}}", + draftSize: "Ukuran: {{value}}", + draftCondition: "Kondisi: {{value}}", + draftMaxPrice: "Harga maks: {{price}} {{currency}}", + draftPriceOpen: "Harga: terbuka", + draftLookingForTitle: "Mencari \"{{title}}\"", + draftWantedCta: "Posting iklan dicari", + draftPrice: "Harga: {{price}} {{currency}}", + draftPriceOffer: "Harga: ajukan penawaran", + draftListTitle: "Pasang \"{{title}}\" untuk dijual", + draftPublishCta: "Terbitkan listing", + statusPosted: "Status diposting 🛹", + wantedPublished: "Iklan dicari diterbitkan 🔎", + listingPublished: "Listing diterbitkan 💸", + mustBeLoggedIn: "Anda harus masuk.", + }, + sasquatchChat: { + faq: { + hi: "Hai! Saya The Sasquatch 🦧 Panduan skate AI Anda. Tanyakan tentang spot, event, coach, gear — atau apa pun tentang aplikasi ini. Apa yang Anda butuhkan?", + hello: "Apa kabar! 🛹 Saya The Sasquatch. Tanyakan tentang spot skate, event, coach, atau cara kerja aplikasinya. Ada yang bisa dibantu?", + hey: "Hai skater! 🤙 Tanyakan tentang spot di dekat Anda, event mendatang, coach, atau apa pun tentang SkateSpots.", + whoAreYou: "Saya The Sasquatch 🦧 — panduan AI untuk SkateSpots. Saya dapat menemukan spot skate di seluruh dunia, mencari event, coach, filmer, dan listing gear. Semuanya didukung data Nostr langsung. Tanyakan saja!", + whatCanYouDo: "Saya dapat menemukan spot skate berdasarkan kota atau negara, mencari event mendatang, menemukan coach dan filmer di The Lab, mencari listing gear, dan menjawab pertanyaan tentang cara kerja aplikasi. Coba: 'spot di Bangkok' atau 'cari coach'! 🛹", + whatIsNostr: "Nostr adalah protokol sederhana dan terbuka untuk jaringan sosial terdesentralisasi. Bayangkan Twitter, tapi tidak ada satu perusahaan pun yang mengendalikannya — Anda memakai kunci kriptografis alih-alih nama pengguna, memilih Relay mana yang menyimpan data Anda (atau menjalankan sendiri), dan satu akun berfungsi di semua aplikasi Nostr! 🔑", + isThisPrivate: "Ini penjelasan jujurnya 🛡️\n\n• **Lokasi GPS Anda tetap di perangkat Anda** — 'Di Dekat Saya' hanya memusatkan peta. Tidak pernah dikirim ke kami atau diterbitkan.\n• **Spot yang Anda tambahkan bersifat publik** (itulah inti peta bersama) — jadi jangan jatuhkan pin di depan pintu rumah Anda sendiri.\n• **DM & chat crew terenkripsi end-to-end** — hanya anggota yang dapat membacanya.\n• Seperti situs web mana pun, server yang Anda hubungi (ubin peta, Relay) dapat melihat **IP** Anda. Ingin menyembunyikannya juga? Gunakan VPN atau Tor.\n\nDetail lengkap di [halaman Privasi](/privacy). 🛹", + privacy: "Versi singkat 🛡️: GPS Anda tidak pernah meninggalkan perangkat, spot yang Anda terbitkan publik secara desain, dan DM/chat crew terenkripsi end-to-end. Server tetap dapat melihat IP Anda (normal untuk situs mana pun) — VPN atau Tor menyembunyikannya jika Anda mau. Rincian lengkap di [halaman Privasi](/privacy).", + amITracked: "SkateSpots tidak melacak Anda — tanpa iklan, tanpa profil analitik, tanpa menjual data, dan tidak ada server SkateSpots yang mengumpulkan lokasi Anda. GPS Anda tetap di perangkat. Satu-satunya yang dilihat server (ubin peta, Relay) adalah **IP** Anda — sama seperti situs web mana pun. Gunakan VPN atau Tor untuk menyembunyikannya. Selengkapnya di [halaman Privasi](/privacy). 🛡️", + doYouTrack: "Tidak — tanpa pelacakan, tanpa iklan, tanpa memanen data. GPS Anda tetap di perangkat dan tidak ada server pusat yang mencatat Anda. Server yang Anda hubungi dapat melihat IP Anda (seperti situs mana pun); VPN/Tor menyembunyikannya. Lihat [halaman Privasi](/privacy). 🛹", + vpn: "Sepenuhnya opsional, tapi bagus jika Anda ingin privasi ekstra 🛡️. VPN menyembunyikan **IP** Anda (perkiraan lokasi) dari server yang dihubungi SkateSpots — ubin peta, Relay, dll. Pilih penyedia tanpa log yang Anda percaya (mis. Mullvad); hindari yang gratis dan mencurigakan.\n\nPerhatian: VPN **tidak** menyembunyikan spot yang Anda terbitkan (itu publik), dan jangan nyalakan GPS browser jika Anda ingin tetap anonim. Detail lengkap di [halaman Privasi](/privacy).", + tor: "Tor Browser memberi privasi IP terkuat — ia mengarahkan Anda melalui beberapa Relay sehingga server tidak dapat melihat IP asli Anda 🧅. Konsekuensinya: lebih lambat, dan peta + beberapa Relay Nostr mungkin lambat atau memblokir exit Tor. Bagus untuk yang sangat berhati-hati.\n\nIngat: Tor menyembunyikan IP Anda, bukan spot yang Anda terbitkan, dan jangan aktifkan GPS browser jika tujuannya anonim. Selengkapnya di [halaman Privasi](/privacy).", + hideMyIp: "Dua opsi gratis 🛡️: **VPN terpercaya** (mudah, cepat — menyembunyikan IP Anda di balik server mereka) atau **Tor Browser** (privasi maksimal, lebih lambat). Keduanya mencegah server yang dihubungi SkateSpots melihat IP asli Anda. Perlu dicatat keduanya tidak menyembunyikan spot yang Anda terbitkan. Lihat [halaman Privasi](/privacy).", + isMyLocation: "Lokasi Anda aman 📍 — 'Di Dekat Saya' hanya membaca GPS Anda di perangkat, untuk memusatkan peta dan mengurutkan spot terdekat. Tidak pernah diterbitkan ke Nostr, tidak pernah dikirim ke kami, tidak pernah dibagikan. Hanya spot yang sengaja Anda tambahkan yang publik. Detail di [halaman Privasi](/privacy).", + whatAreZaps: "Zap adalah tip Bitcoin Lightning instan yang dikirim lewat Nostr! Klik ⚡ pada konten apa pun, kirim sats langsung ke dompet kreatornya. Seperti menekan 'suka' tapi dengan uang sungguhan. Instan, peer-to-peer, tanpa perantara. ⚡", + howToLogin: "Dua cara:\n1. **Ekstensi browser** (Desktop): Pasang Alby atau nos2x, lalu klik 'Masuk'\n2. **Pengguna baru**: Klik 'Daftar' untuk membuat kunci. Unduh nsec Anda (kunci rahasia) dan SIMPAN — ini akun Anda selamanya!", + whatIsCashu: "Dompet Bitcoin bawaan! Token ecash Cashu yang didukung Lightning — berfungsi offline di spot skate, berfokus privasi (mint tidak dapat melacak pembayaran). Buka Dompet di Pengaturan untuk memakainya. 🥜", + whatIsNwc: "Nostr Wallet Connect — seperti USB-C untuk dompet Lightning. Hubungkan Alby, Minibits, Zeus, atau Coinos sekali, dan Zap dengan satu klik selamanya. Terenkripsi, Anda mengendalikan batas pengeluaran. 🔌⚡", + isItFree: "100% gratis. Tanpa iklan, tanpa langganan, tanpa basa-basi korporat. Dibuat oleh skater untuk skater. Didanai komunitas via Angor — lihat halaman Pendukung. Anda juga bisa mendapatkan Bitcoin melalui Zap komunitas karena berkontribusi spot berkualitas. 🛹", + whatCanIDo: "Temukan spot di seluruh dunia di peta, sewa pro di The Lab (coach, filmer, fotografer, editor, pembangun ramp), berkumpul dengan crew, ikuti event, ikuti tur, beli/jual gear, lacak Stash pribadi Anda, Zap kreator, periksa cuaca spot, dan bangun komunitas skate terdesentralisasi!", + whatIsTheLab: "The Lab adalah tempat Anda menyewa pro dunia skate: Coach, Filmer, Fotografer, Editor Video, dan Pembangun ramp/park/DIY. Masing-masing bisa perorangan atau kolektif (crew/studio) — anggotanya mengonfirmasi dengan kunci mereka sendiri jadi terjamin keasliannya. Semua di Nostr, tanpa akun palsu. 🎓", + whatIsACrew: "Crew adalah keluarga skate Anda yang berlabuh di peta — yang Anda ajak skate BERSAMA, bukan yang Anda sewa. Setiap crew punya wilayah asal di peta (pin teal), spot asal, anggota, suasana, dan manifesto. Anggota mengonfirmasi dari kunci mereka sendiri. Buat di Crew → 'Buat Crew'. 🤘", + whatAreCrews: "Crew adalah keluarga skate Anda yang berlabuh di peta — yang Anda ajak skate BERSAMA, bukan yang Anda sewa. Setiap crew punya wilayah asal di peta (pin teal), spot asal, anggota, dan manifesto. Anggota mengonfirmasi dari kunci mereka sendiri. Buka tab Crew untuk mulai atau bergabung! 🤘", + howToStartACrew: "Buka tab Crew → 'Buat Crew'. Beri nama, tandai wilayah asal Anda di peta, tambahkan suasana (atau #hashtag kustom Anda sendiri), tautkan spot asal Anda, dan tambahkan anggota lewat npub. Setiap anggota mengonfirmasi dari kunci mereka sendiri jadi daftarnya sah. 🤘", + whatIsMyStash: "Stash Saya adalah loker gear PRIBADI dan terenkripsi Anda (enkripsi NIP-44). Lacak Deck, Trucks, Wheels, sepatu Anda — dengan lokasi penyimpanan, kondisi, kelangkaan, dan harga. Hanya ANDA yang dapat membacanya kecuali Anda menandai item sebagai publik. Bagus untuk asuransi atau merencanakan tukar-menukar. 🎒", + whatIsStash: "Stash Saya adalah inventaris gear PRIBADI dan terenkripsi Anda. Catat semua yang Anda miliki — kondisi, tempat penyimpanan, nilai — semuanya terenkripsi sehingga hanya Anda yang bisa melihatnya. Tandai item sebagai publik jika Anda ingin menjual atau memamerkannya. 🎒", + whatIsABuilder: "Pembangun adalah crew ramp/park/DIY di The Lab yang dapat Anda sewa untuk membangun transisi, Bowl, Rail, atau seluruh park. Mereka mencantumkan apa yang mereka bangun, bahan, skala proyek, dan bisa berlisensi/berasuransi. Sering berupa kolektif — dan mereka dapat menautkan spot yang telah mereka bangun ke peta. 🏗️", + whatIsANutzap: "Nutzap (NIP-61) adalah tip ecash yang dikirim lewat Nostr — token Cashu privat yang di-Zap langsung ke seseorang. Anda dapat mengatur PENERIMAAN nutzap di Dompet. (Pengiriman nutzap penuh sedang diluncurkan — untuk sekarang gunakan Zap Lightning.) 🥜⚡", + whatIsClink: "CLINK adalah kode pembayaran native Nostr (sebuah 'noffer'). Toko, Crew, dan pro Lab dapat menambahkannya sehingga Anda dapat membayar mereka tanpa perlu alamat Lightning — Anda akan melihat tombol 'Bayar via CLINK' dengan QR. Pindai dengan dompet CLINK seperti ShockWallet. 🔗⚡ [specs](https://clinkme.dev/specs.html) [apps](https://clinkme.dev/apps.html)", + whatIsNoffer: "Noffer adalah kode pembayaran CLINK — cara dapat dibayar yang dapat dipakai ulang dan native Nostr tanpa server web atau alamat Lightning. Tambahkan milik Anda di profil toko/Crew/Lab Anda dan orang bisa membayar Anda langsung. 🔗", + whatAreTours: "Tur adalah perjalanan skate terpandu — sesi lokal, perjalanan darat nasional, atau tur world destruction. Temukan di peta atau bagian Tur, bertemu, dan skate di medan baru bersama warga lokal. 🗺️🛹", + whatIsAShop: "Toko Skate adalah toko lokal yang terdaftar di peta. Temukan dan dukung toko skate fisik (atau online) yang nyata di area Anda — sebagian bahkan menerima Bitcoin. 🏪", + howToSellGear: "Buka Tukar Gear / Marketplace dan buat listing (NIP-99). Tambahkan foto, harga dalam sats, kondisi, dan opsional pin ke spot agar muncul di peta. Pembeli Zap atau kirim pesan langsung ke Anda. 🛹💸", + supporters: "SkateSpots didanai komunitas via Angor (crowdfunding Bitcoin terdesentralisasi) — tanpa iklan, tanpa investor, tanpa menjual data. Lihat halaman Pendukung untuk mendukung proyek dan menjaga jalanan tetap bebas. ❤️⚡", + trustScore: "Skor kepercayaan (0-100) didukung oleh Relatr. Menganalisis jaringan Nostr Anda: pengikut, aktivitas, keterlibatan, Zap. Lebih tinggi = lebih dipercaya. Membantu menyaring bot dan spam. Periksa profil mana pun untuk melihat skornya. 🛡️", + whatRelay: "SkateSpots menggunakan: 🛹 goskatespots.nostr1.com (utama, masuk allowlist untuk kualitas) + relay.ditto.pub (global) + purplepag.es (agregator profil). Data Anda direplikasi di semuanya untuk redundansi.", + tripPlanner: "Sebutkan sebuah kota dan saya akan membuat perjalanan skate dari hari ke hari 🗺️ — spot, event, coach, dan Crew lokal, sadar cuaca (hari hujan = saran Crew untuk spot tertutup). Coba 'rencanakan saya 3 hari di Lisbon'. Saya bisa menyimpan semuanya ke Koleksi, dan mengarahkan Anda ke penerbangan/penginapan di situs aslinya (tanpa KYC, tanpa perantara). 🛹", + planATrip: "Cukup katakan 'rencanakan saya 3 hari di Barcelona' (atau kota mana pun) dan saya akan memetakan spot, sesi, coach, dan Crew lokal untuk setiap hari. Simpan sebagai Koleksi dan ayo skate. 🗺️🛹", + sasquatchPro: "**Sasquatch Pro** 🦧⚡ adalah pass pendukung Lightning yang membuka sisi personal saya:\n\n• 🧠 **Asisten pribadi** — saya membaca Stash, Crew, spot & listing Anda sendiri\n• ✨ **Draf aksi** — pasang gear, posting status skate Anda, rencanakan perjalanan (Anda selalu konfirmasi sebelum apa pun terbit)\n• 💬 **Konteks pribadi** — jawaban saya memakai data Anda sendiri, bukan hanya hasil publik\n• ⚡ **Dukung proyek** — Anda menjaga SkateSpots tetap gratis dan tanpa iklan\n\nSasquatch gratis tetap gratis: pencarian spot/event/coach/crew publik, glosarium & perencanaan perjalanan semuanya berfungsi tanpa Pro. Pro hanya menambahkan hal yang *personal*. Ketuk **⚡ Go Pro** di atas. Tingkatan: 7 hari ~2k sats, 1 bulan ~5k, 3 bulan ~12k, 1 tahun ~36k.", + proPerks: "Keuntungan Pro 🦧⚡: asisten pribadi (membaca Stash/Crew/spot/listing Anda), draf aksi (pasang gear, posting status, rencanakan perjalanan — Anda konfirmasi), dan jawaban yang memakai konteks pribadi Anda. Plus Anda langsung mendukung SkateSpots dan menjaganya gratis + tanpa iklan. Gratis tetap gratis — Pro menambahkan lapisan personal. Ketuk **⚡ Go Pro** di atas.", + proVersion: "Versi Pro dari saya 🦧⚡ menambahkan **asisten pribadi**: saya dapat membaca Stash, Crew, spot & listing Anda sendiri, menyusun draf aksi untuk Anda (pasang gear, posting status, rencanakan perjalanan — Anda selalu konfirmasi dulu), dan memakai konteks pribadi Anda dalam jawaban. Ini juga langsung mendukung proyek. Sasquatch gratis (pencarian spot/event/coach/crew, glosarium, perencana perjalanan) tetap gratis. Ketuk **⚡ Go Pro** di atas.", + perks: "Keuntungan Pro 🦧⚡: asisten pribadi (Stash/Crew/spot/listing Anda), draf aksi yang Anda konfirmasi, dan jawaban yang memakai konteks Anda sendiri — plus Anda menjaga aplikasi tetap gratis & tanpa iklan. Ketuk **⚡ Go Pro** di atas.", + goPro: "Ketuk tombol **⚡ Go Pro** di atas untuk membuka lembar peningkatan. Pro membuka asisten pribadi saya (Stash/Crew/spot/listing) dan draf aksi, dan langsung mendukung proyek. Bayar dengan Lightning — 7 hari ~2k sats hingga 1 tahun ~36k sats. Fitur gratis tetap gratis. 🦧", + proPricing: "Tingkatan Pro (bayar dengan Lightning ⚡): **7 hari** ~2.000 sats (~$1,20), **1 bulan** ~5.000 sats (~$3), **3 bulan** ~12.000 sats (~$7, diskon 20%), **1 tahun** ~36.000 sats (~$21, nilai terbaik). Ketuk **⚡ Go Pro** di atas.", + howMuchIsPro: "Tingkatan Pro: 7 hari ~2.000 sats, 1 bulan ~5.000 sats, 3 bulan ~12.000 sats (diskon 20%), 1 tahun ~36.000 sats (nilai terbaik). Bayar dengan Lightning ⚡. Ketuk **⚡ Go Pro** di atas.", + upgrade: "Untuk meningkatkan ke Sasquatch Pro, ketuk tombol **⚡ Go Pro** di atas. Bayar dengan Lightning (7 hari ~2k sats hingga 1 tahun ~36k). Pro membuka asisten pribadi dan draf aksi saya, dan langsung mendukung proyek. 🦧⚡", + }, + statsTitle: "📊 **SkateSpots dalam angka**", + weatherTemp: "• {{temp}}°C (terasa {{feels}}°C)", + weatherSkateability: "• Kelayakan skate: **{{label}}** ({{score}}/100)", + weatherError: "Tidak dapat membaca cuaca saat ini. Coba lagi sebentar. 🌧️", + labelSpots: "spot", + labelEvents: "event", + labelLabPros: "pro Lab", + labelCrews: "Crew", + labelShops: "toko skate", + labelTours: "tur", + labelGear: "listing gear", + unnamed: "Tanpa nama", + emptyWhere: " di **{{place}}**", + emptyResult: "Tidak menemukan {{label}} apa pun{{where}} saat ini 🦧\n\nIni bisa berarti belum ada yang terdaftar — atau Relay lambat menjawab. Coba lagi sebentar, periksa ejaannya, atau [tambahkan yang pertama di peta](https://skate-spots.org/map). 🛹", + foundTitle: "{{emoji}} Menemukan **{{count}}** {{label}}:\n{{lines}}{{more}}", + moreResults: "\n\n…dan **{{count}}** lagi — [lihat semuanya di peta](https://skate-spots.org/map) 🗺️", + locationDenied: "Saya tidak dapat melihat lokasi Anda — tidak ada yang pernah meninggalkan perangkat Anda; saya hanya membacanya secara lokal saat Anda meminta, dan browser menolaknya. Ketuk 🎯 **Di Dekat Saya** di peta, atau sebutkan sebuah kota: \"spot di Bangkok\". 🛹", + noNearbySpots: "Belum ada spot yang dipetakan di dekat Anda 🦧 — [jadilah yang pertama menambahkannya](https://skate-spots.org/create-spot). 🛹", + closestTitle: "Paling dekat dengan Anda saat ini:", + closestFooter: "_Dihitung di perangkat Anda — lokasi Anda tidak pernah meninggalkannya._", + proNudge: "Itu fitur **Sasquatch Pro** 🦧⚡ — dengan Pro saya dapat membaca Stash, Crew, spot, dan listing Anda, menyusun draf listing gear, iklan dicari, dan status skate, serta merencanakan perjalanan Anda. Ini pass pendukung Lightning yang menjaga SkateSpots tetap gratis & tanpa iklan. Ketuk tombol **⚡ Go Pro** di atas untuk membukanya. 🛹", + draftingProPerk: "Menyusun draf aksi (posting status, memasang gear) adalah keuntungan **Sasquatch Pro** 🦧⚡ — ketuk **⚡ Go Pro** di atas untuk membukanya.", + draftIntro: "Ini drafnya — tinjau dan ketuk untuk menerbitkan. Tidak ada yang tayang sampai Anda konfirmasi. 🛹", + draftFailed: "Saya tidak dapat menyusun draf itu — coba beri tahu detailnya lagi (mis. \"pasang Wheels Spitfire saya seharga 8000 sats\").", + tripAskCity: "Ke mana? Sebutkan sebuah kota (mis. \"rencanakan saya 3 hari di Lisbon\") dan saya akan menyusun perjalanan. 🗺️", + tripEmptyMap: "Belum ada apa pun di peta untuk **{{destination}}** 🦧 — jadilah yang pertama menambahkan spot di [skate-spots.org](https://skate-spots.org). Setelah warga lokal menambahkan spot, Crew & event, saya akan menyusun perjalanan lengkap untuk Anda.", + tripLocked: "Sudah saya kunci **misi {{destination}}** untuk Anda 🛹 — spot, sesi, dan warga lokal di bawah. Sesuaikan atau simpan.", + tripFailed: "Tidak dapat menjangkau data langsung untuk merencanakan itu saat ini. Coba lagi sebentar! 🛹", + tripEmptyMapLocal: "Belum ada apa pun di peta untuk **{{destination}}** 🦧 — jadilah yang pertama di [skate-spots.org](https://skate-spots.org).", + tripMissionLocal: "Ini **misi {{destination}}** Anda 🛹 — spot, sesi & warga lokal di bawah.", + relayFailed: "Relay tidak menjawab tepat waktu saat ini 🛰️ — itu biasanya koneksi lambat, bukan spot yang hilang. Coba lagi sebentar. 🛹", + couldNotProcess: "Hmm, tidak dapat memproses itu. Coba ungkapkan dengan cara lain!", + freeTierFallback: "Yang itu memerlukan penalaran AI — fitur **Sasquatch Pro** ⚡🦧\n\nSaya tetap dapat menemukan **spot, event, coach, Crew, toko, tur, dan gear** langsung dari Relay — tanyakan mis. \"spot di Barcelona\" — dan [Glosarium](/glossary) mencakup 150+ trick & istilah. Ketuk **⚡ Go Pro** di atas untuk membuka jawaban AI.", + aiDownFallback: "Otak AI saya sedang melayang saat ini 🦧 — tapi saya tetap siap membantu:\n\n• 🗺️ [Peta](/) — spot, toko, event di dekat Anda\n• 🧪 [The Lab](/lab) — coach, filmer, editor\n• 📖 [Glosarium](/glossary) — 150+ trick & istilah\n• 👥 [Crew](/crews) — temukan orang-orang Anda\n\nAtau sebutkan saja sebuah **kota** (\"spot di Barcelona\") atau sebuah **trick** (\"apa itu nollie\") dan saya akan menjawab langsung. 🛹", + wentWrong: "Ada yang salah di pihak saya. Coba lagi sebentar! 🦧", + publishError: "Tidak dapat menerbitkan itu: {{error}}. Coba lagi sebentar.", + unknownError: "kesalahan tidak diketahui", + }, +}; export default idBatch2; diff --git a/src/i18n/id/batch3.ts b/src/i18n/id/batch3.ts index fb4cd7c..56fe53d 100644 --- a/src/i18n/id/batch3.ts +++ b/src/i18n/id/batch3.ts @@ -1,4 +1,1300 @@ -/** id — batch 3. Filled by the translation pass; empty until then. */ -const idBatch3 = {}; +/** + * id — batch 3: settingsUi namespace (Pro/support, auth, signup, profile, + * security, relays, notifications, onboarding, about, FAQ, privacy, license, + * glossary, signers, beta disclaimer). + * Skate vocabulary stays English (Spot, Shop, Crew, Gear, Stash, The Lab, Nostr, + * Lightning, Zap, Relay, sats, NIP-05, NWC, npub, Cashu); trick names stay English. + */ +const idBatch3 = { + settingsUi: { + proSupport: { + title: 'Pro & Dukungan', + subtitle: 'Ekstra opsional yang menjaga SkateSpots tetap gratis', + prepaidTitle: 'Prabayar, bukan langganan', + prepaidBody: 'Setiap pembelian adalah pembayaran Bitcoin/Lightning sekali bayar — tanpa akun, tanpa tagihan berulang, tanpa penyimpanan dana. Membayar lagi memperpanjang waktu Anda.', + sasquatchTitle: 'Sasquatch Pro', + sasquatchBenefit: 'Membuka asisten AI pribadi — ia dapat membaca Stash, crew, dan listing Anda sendiri — sekaligus membantu mendanai proyek.', + active: 'Aktif', + activeUntil: 'Aktif hingga {{date}}', + daysLeft: '{{count}} hari tersisa', + notActive: 'Tidak aktif', + goPro: 'Jadi Pro', + extend: 'Perpanjang Pro', + day: 'hari', + featuredTitle: 'Penempatan unggulan', + featuredBenefit: 'Dorong listing ke atas dengan lencana Pro — untuk profil Lab, event, shop, dan tour.', + featuredHow: 'Tingkatan durasi berlaku untuk setiap jenis; komitmen lebih lama lebih murah per hari. Anda menonjolkan listing saat membuat atau mengeditnya.', + featuredUntil: 'Hingga {{date}}', + yourFeatured: 'Listing unggulan Anda', + noneFeatured: 'Tidak ada penempatan unggulan yang aktif.', + freeTitle: 'Jalur gratis', + freeBody: 'FAQ AI dan pencarian lokal selalu gratis, dan Anda dapat menerbitkan listing marketplace dengan proof-of-work gratis alih-alih biaya sats.', + }, + notFound: { + seoTitle: '404 - Halaman Tidak Ditemukan', + seoDescription: 'Halaman yang Anda cari tidak dapat ditemukan. Kembali ke beranda untuk melanjutkan menjelajah.', + message: 'Ups! Halaman tidak ditemukan', + returnHome: 'Kembali ke Beranda', + }, + loginArea: { + signUp: 'Daftar', + logIn: 'Masuk', + }, + accountSwitcher: { + switchAccount: 'Ganti Akun', + walletSettings: 'Pengaturan Dompet', + addAccount: 'Tambah akun lain', + logout: 'Keluar', + }, + amberHint: { + defaultAction: 'kirim', + multiBefore: 'Penandatangan Anda akan meminta persetujuan', + multiTimes: '{{approvals}} kali', + multiAfter: 'untuk {{action}} — itu normal untuk pesan terenkripsi (satu persetujuan per penerima). Setujui semuanya.', + single: 'Penandatangan Anda akan meminta persetujuan untuk {{action}}.', + }, + amberCallback: { + processing: 'Memproses login Amber...', + gotResult: 'Hasil diterima: {{result}}', + noResultDebug: 'Tidak ada hasil dari Amber', + noResultToast: 'Tidak ada hasil yang diterima dari Amber. Operasi mungkin dibatalkan.', + validPubkey: 'Pubkey valid! Sedang masuk...', + loginSuccessful: 'Berhasil masuk!', + loginErrorDebug: 'Galat login: {{error}}', + invalidResultDebug: 'Format hasil tidak valid: {{result}}', + loggedInTitle: 'Sudah masuk', + amberLoginDesc: 'Berhasil masuk dengan Amber!', + loginFailedTitle: 'Gagal masuk', + loginFailedDesc: 'Gagal menyelesaikan login Amber. Silakan coba lagi.', + invalidPubkeyDesc: 'Pubkey tidak valid diterima dari Amber.', + sessionLostToast: 'Data sesi hilang. Silakan coba lagi.', + eventSignedTitle: 'Event ditandatangani', + eventSignedDesc: 'Event Anda telah ditandatangani oleh Amber.', + signingFailedTitle: 'Gagal menandatangani', + signingFailedDesc: 'Gagal memproses event bertanda tangan dari Amber.', + operationCompleteTitle: 'Operasi selesai', + operationCompleteDesc: '{{op}} selesai.', + }, + loginDialog: { + loginWithAmber: 'Masuk dengan Amber (Android)', + welcomeTitle: 'Selamat datang di SkateSpots', + welcomeSubtitle: 'Daftar atau masuk untuk melanjutkan', + newHere: 'Baru di sini?', + createFree: 'Buat akun gratis. Tanpa email.', + createAccount: 'Buat Akun', + orLogIn: 'Atau masuk', + loggedInTitle: '🛹 Sudah masuk!', + loggedIn: 'Sudah masuk!', + connectedAmber: 'Terhubung via Amber!', + amberLoginFailed: 'Login Amber gagal', + amberCancelled: 'Login dibatalkan. Ketuk "Buka Amber" untuk mencoba lagi.', + amberNotFound: 'Amber tidak ditemukan. Pastikan Amber terpasang dari ZapStore.', + loginFailed: 'Gagal masuk', + pubkeyError: 'Tempel pubkey hex Anda (64 karakter) atau npub dari Amber', + pairedSigner: 'Dipasangkan dengan penandatangan Anda.', + connectFailed: 'Tidak dapat terhubung ke penandatangan Anda.', + openedEncrypted: 'Kunci terenkripsi Anda dibuka.', + openKeyFailed: 'Tidak dapat membuka kunci itu.', + bunkerPrefix: 'Harus dimulai dengan bunker://', + connectedBunker: 'Terhubung via bunker!', + bunkerFailed: 'Gagal: {{error}}', + checkBunkerUri: 'Periksa URI bunker Anda', + nsecPrefix: 'Harus dimulai dengan nsec1', + invalidNsec: 'nsec tidak valid: {{error}}', + checkKey: 'Periksa kunci Anda', + noExtensionTitle: 'Tidak ada ekstensi ditemukan', + noExtensionDesc: 'Pasang Alby atau ekstensi NIP-07 lainnya.', + amberIdleDesc: 'Kunci Anda tetap berada di dalam Amber. Satu ketukan — setujui di Amber dan Anda kembali ke sini, sudah masuk. Tidak ada yang perlu disalin.', + continueWithAmber: 'Lanjutkan dengan Amber', + noAmberGetIt: 'Belum punya Amber? Dapatkan →', + waitingAmberTitle: 'Menunggu Amber…', + waitingAmberDesc: 'Setujui permintaan di Amber. Anda akan otomatis masuk begitu kembali.', + openAmberAgain: 'Buka Amber lagi', + havingTrouble: 'Mengalami masalah? Masukkan kunci Anda secara manual', + enterPublicKey: 'Masukkan kunci publik Anda', + enterPublicKeyDescBefore: 'Hanya jika alur otomatis tidak berhasil. Di Amber: ketuk profil Anda →', + copyPublicKey: 'Salin kunci publik', + enterPublicKeyDescAfter: 'lalu tempel di sini.', + connect: 'Hubungkan', + back: '← Kembali', + signInWithPhone: 'Masuk dengan ponsel Anda', + signInWithPhoneDesc: 'Pindai dengan aplikasi penandatangan (Amber, nsec.app). Kunci Anda tidak pernah meninggalkan ponsel.', + showPairingCode: 'Tampilkan kode pemasangan', + waitingSigner: 'Menunggu penandatangan Anda…', + copyLink: 'Salin tautan', + orPasteBunker: 'atau tempel URL bunker', + bunkerTitle: 'Bunker (NIP-46)', + bunkerPasteBefore: 'Tempel', + bunkerPasteAfter: 'URI Anda.', + amberInstructions: 'Pengaturan → NIP-46 Bunker → Buat → Salin', + nsecAppInstructions: 'Hubungkan aplikasi → Salin URI bunker', + secretKeyTitle: 'Kunci Rahasia', + secretKeyRawDesc: 'Tempel kunci rahasia Nostr Anda secara langsung.', + secretKeyEncDesc: 'Buka cadangan kunci yang dilindungi kata sandi.', + rawNsec: 'nsec mentah', + encryptedNip49: 'Terenkripsi (NIP-49)', + nsecWarning: '⚠️ Hanya gunakan ini di perangkat tepercaya. Jangan pernah bagikan nsec Anda.', + login: 'Masuk', + encSaferDesc: 'Lebih aman: kunci tetap terenkripsi sampai Anda memasukkan kata sandi, jadi cadangannya aman disimpan di penyimpanan cloud atau pengelola kata sandi.', + password: 'Kata sandi', + openEncryptedKey: 'Buka kunci terenkripsi', + browserExtensionTitle: 'Ekstensi Peramban (NIP-07)', + browserExtensionDesc: 'Terbaik untuk desktop. Bekerja dengan Alby, nos2x, Flamingo.', + loginWithExtension: 'Masuk dengan Ekstensi', + }, + signupDialog: { + download: 'Unduh', + stepChoose: 'Pilih', + stepProfile: 'Profil', + stepSaveKey: 'Simpan kunci', + somethingWrong: 'Terjadi kesalahan', + createFailed: 'Tidak dapat membuat akun Anda. Silakan coba lagi.', + keySavedTitle: 'Kunci Rahasia Tersimpan!', + keySavedDesc: 'Kunci Anda telah disimpan dengan aman.', + downloadFailedTitle: 'Unduhan gagal', + downloadFailedDesc: 'Tidak dapat mengunduh berkas kunci. Silakan salin secara manual.', + encSavedTitle: 'Cadangan terenkripsi tersimpan 🔐', + encSavedDesc: 'Simpan berkas DAN kata sandinya — Anda memerlukan keduanya untuk masuk kembali.', + encFailed: 'Tidak dapat mengenkripsi kunci itu.', + invalidFileTitle: 'Jenis berkas tidak valid', + invalidFileDesc: 'Silakan pilih berkas gambar untuk avatar Anda.', + fileTooLargeTitle: 'Berkas terlalu besar', + fileTooLargeDesc: 'Gambar avatar harus lebih kecil dari 5MB.', + avatarUploadedTitle: 'Avatar terunggah!', + avatarUploadedDesc: 'Avatar Anda berhasil diunggah.', + uploadFailedTitle: 'Unggahan gagal', + uploadFailedDesc: 'Gagal mengunggah avatar. Silakan coba lagi.', + nameRequiredTitle: 'Nama tampilan wajib diisi', + nameRequiredDesc: 'Pilih nama tampilan agar skater lain tahu siapa Anda. Anda dapat mengubahnya kapan saja.', + reserveFailedTitle: 'Tidak dapat memesan nama itu', + reserveFailedDesc: '{{error}} Anda dapat mengklaimnya nanti di Pengaturan.', + profileCreatedTitle: 'Profil Dibuat!', + profileCreatedDesc: 'Profil Anda telah disiapkan.', + profileFailedTitle: 'Penyiapan Profil Gagal', + profileFailedDesc: 'Akun Anda dibuat tetapi penyiapan profil gagal. Anda dapat memperbaruinya nanti.', + welcomeToastTitle: 'Selamat datang!', + welcomeToastDesc: 'Akun Anda sudah siap.', + titleWelcome: 'Bergabung dengan SkateSpots', + titleProfile: 'Siapkan Profil Anda', + titleDone: 'Selamat datang!', + createFreeAccount: 'Buat akun gratis Anda', + createFreeAccountDesc: 'Tanpa email, tanpa telepon, tanpa kata sandi. Akun Anda adalah kunci Nostr — pilih di mana kunci itu disimpan.', + recommended: 'Direkomendasikan', + signUpWithAmber: 'Daftar dengan Amber', + signUpWithAmberDesc: 'Kunci Anda dibuat dan disimpan di dalam aplikasi Amber — SkateSpots tidak pernah menyentuhnya. Paling aman. Satu ketukan untuk menyetujui.', + continueWithAmber: 'Lanjutkan dengan Amber', + orQuickWay: 'atau cara cepat', + quickAccount: 'Akun cepat di perangkat ini', + quickAccountDesc: 'Kami membuat kunci yang tersimpan di perangkat ini. Mulai paling cepat — kami akan membantu Anda menyimpan cadangan segera setelahnya.', + createQuickAccount: 'Buat akun cepat', + quickReassurance: 'Butuh 5 detik · tersimpan di perangkat ini · kami bantu cadangkan berikutnya', + preferAnotherSigner: 'Lebih suka penandatangan lain?', + iosDesktopNudge: 'Di iOS atau desktop? Aplikasi penandatangan atau ekstensi peramban adalah pilihan paling aman —', + seeAllOptions: 'Lihat semua opsi', + youreInPickName: 'Anda berhasil masuk! 🛹 Pilih nama tampilan agar skater tahu siapa Anda', + changeAnytime: 'Anda dapat mengubahnya kapan saja nanti. Bio dan avatar bersifat opsional.', + publishingProfile: 'Menerbitkan profil Anda...', + displayName: 'Nama Tampilan', + displayNamePlaceholder: 'mis. Tony, gnarlyGrind, atau nama crew Anda', + displayNameHint: 'Wajib — bagaimana Anda muncul di seluruh SkateSpots. Ubah kapan saja.', + skateName: 'Nama SkateSpots Anda', + skateNameHint: 'Gratis dan opsional — handle terverifikasi yang menampilkan ✓ di profil Anda.', + bio: 'Bio', + bioPlaceholder: 'Ceritakan tentang diri Anda...', + avatar: 'Avatar', + uploadAvatar: 'Unggah gambar avatar', + saving: 'Menyimpan...', + saveAndStart: 'Simpan & Mulai Skate', + addNameToContinue: 'Tambahkan nama tampilan untuk melanjutkan.', + savingPublishesNote: 'Menyimpan akan menerbitkan profil Anda ke Nostr — penandatangan Anda mungkin meminta persetujuan sekali.', + youreIn: 'Anda berhasil masuk! 🛹', + oneQuickThing: 'Satu hal cepat sebelum Anda mulai…', + saveLoginKey: 'Simpan kunci login Anda', + saveLoginKeyBefore: 'Ini adalah', + only: 'satu-satunya', + saveLoginKeyAfter: 'cara kembali ke akun Anda — tanpa email, tanpa reset kata sandi. Simpan sekarang dan Anda dapat masuk di perangkat mana pun, di mana pun Anda skate.', + revealSaveKey: 'Tampilkan & simpan kunci saya', + recoveryCopied: 'Kode pemulihan disalin. Simpan di tempat yang aman.', + saved: 'Tersimpan', + treatLikeBoardKeys: 'Perlakukan seperti kunci papan Anda — siapa pun yang memiliki kode ini mengendalikan akun Anda. Jangan pernah membagikannya.', + hideEncBackup: 'Sembunyikan cadangan terenkripsi', + saveEncBackup: 'Simpan cadangan terenkripsi', + encBackupBefore: 'Salinan yang dilindungi kata sandi — aman disimpan di penyimpanan cloud atau pengelola kata sandi. Anda akan memerlukan berkasnya', + and: 'dan', + encBackupAfter: 'kata sandinya.', + choosePassword: 'Pilih kata sandi', + saveEncBackupCta: 'Simpan cadangan terenkripsi', + savedCodeAria: 'Saya sudah menyimpan kode pemulihan saya', + savedCodeLabel: 'Saya sudah menyimpan kode pemulihan saya di tempat aman — pengelola kata sandi, atau ditulis offline.', + letsSkate: 'Ayo skate', + saveLater: 'Saya akan menyimpannya nanti dari Pengaturan', + advancedSigner: 'Lanjutan: gunakan aplikasi penandatangan sebagai gantinya', + }, + mnemonic: { + generatedTitle: 'Frasa Pemulihan Dibuat! 🎉', + generatedDesc: 'Tulis 12 kata ini secara berurutan. Kata-kata ini adalah kunci akun Anda!', + savedTitle: 'Frasa Pemulihan Tersimpan!', + savedDesc: 'Simpan berkas ini di lokasi yang aman.', + downloadFailedTitle: 'Unduhan gagal', + downloadFailedDesc: 'Tidak dapat mengunduh berkas. Silakan salin secara manual.', + copiedTitle: 'Disalin ke papan klip!', + copiedDesc: 'Frasa pemulihan Anda telah disalin.', + qrWindowTitle: 'Kode QR Frasa Pemulihan', + qrHeading: 'Kode QR Frasa Pemulihan Anda', + qrAlt: 'Kode QR Frasa Pemulihan', + qrWarning: 'Jaga kerahasiaan dan keamanan kode QR ini!', + qrPrint: 'Cetak Kode QR', + qrFailedTitle: 'Kode QR gagal', + qrFailedDesc: 'Tidak dapat membuat kode QR.', + accountCreatedTitle: 'Akun Dibuat! 🎉', + accountCreatedDesc: 'Semuanya siap! Frasa pemulihan Anda aman.', + loginFailedTitle: 'Login Gagal', + loginFailedDesc: 'Gagal membuat akun. Silakan coba lagi.', + verifyFailedTitle: 'Verifikasi Gagal', + verifyFailedDesc: 'Kata-katanya tidak cocok. Silakan periksa dan coba lagi.', + titlePrefix: 'Buat Akun dengan', + titleSuffix: 'Frasa Pemulihan', + twelveWordTitle: 'Frasa Pemulihan 12 Kata', + twelveWordDesc: 'Frasa pemulihan Anda seperti kata sandi utama. Tulis di kertas dan simpan dengan aman. Anda akan memerlukannya untuk mengakses akun dari perangkat lain atau jika Anda menghapus data peramban.', + generate: 'Buat Frasa Pemulihan', + useNsecInstead: 'Gunakan kunci nsec lanjutan sebagai gantinya', + yourPhrase: 'Frasa Pemulihan Anda', + copy: 'Salin', + download: 'Unduh', + qrCode: 'Kode QR', + criticalWarning: 'Peringatan Keamanan Penting', + warnWriteStrong: 'Tuliskan', + warnWrite: 'di kertas dan simpan dengan aman', + warnNeverShareStrong: 'Jangan pernah bagikan', + warnNeverShare: 'frasa pemulihan Anda kepada siapa pun', + warnBackupsStrong: 'Simpan beberapa cadangan', + warnBackups: 'di lokasi aman yang berbeda', + warnAnyoneStrong: 'Siapa pun dengan frasa ini', + warnAnyone: 'mengendalikan akun Anda selamanya', + warnLoseStrong: 'Jika Anda kehilangannya', + warnLose: 'Anda kehilangan akun Anda secara permanen', + savedSecurely: 'Saya Sudah Menyimpannya dengan Aman', + verifyTitle: 'Verifikasi Frasa Pemulihan Anda', + verifyDesc: 'Untuk memastikan Anda menyimpannya dengan benar, silakan masukkan kata-kata ini:', + wordLabel: 'Kata #{{n}}', + wordPlaceholder: 'Masukkan kata #{{n}}', + goBack: 'Kembali', + verifyCreate: 'Verifikasi & Buat Akun', + completeTitle: 'Akun Dibuat!', + completeDesc: 'Akun Nostr Anda sudah siap!', + signerTitle: 'Direkomendasikan: Siapkan Aplikasi Penandatangan', + signerSubtitle: 'Jaga kunci Anda tetap ekstra aman', + signerDesc: 'Untuk keamanan lebih baik, gunakan aplikasi penandatangan khusus alih-alih menempelkan frasa pemulihan Anda di mana-mana. Aplikasi penandatangan menjaga kunci Anda tetap aman sambil memungkinkan Anda memakai aplikasi Nostr apa pun.', + signerCta: 'Pelajari Aplikasi Penandatangan', + skip: 'Lewati dulu', + }, + signupMethod: { + titlePrefix: 'Pilih', + titleSuffix: 'Metode Pendaftaran', + subtitle: 'Kedua metode sama amannya. Pilih yang paling cocok untuk Anda!', + recommended: 'Direkomendasikan', + mnemonicTitle: 'Frasa Pemulihan', + mnemonicDesc: '12 kata yang mudah diingat. Standar industri yang digunakan Bitcoin, Ethereum, dan sebagian besar dompet kripto.', + mnemonicF1: 'Mudah dituliskan di kertas', + mnemonicF2: 'Berfungsi dengan aplikasi Nostr lain (NIP-06)', + mnemonicF3: 'Dapat membuat beberapa akun', + mnemonicF4: 'Familiar bagi pengguna kripto', + useMnemonic: 'Gunakan Frasa Pemulihan', + advanced: 'Lanjutan', + nsecTitle: 'Kunci Rahasia (nsec)', + nsecDesc: 'Kunci kriptografis mentah. Lebih teknis tetapi memberi Anda akses langsung ke identitas Nostr Anda.', + nsecF1: 'Kendali kriptografis langsung', + nsecF2: 'Kompatibel dengan semua aplikasi Nostr', + nsecF3: 'Satu string untuk dicadangkan', + nsecF4: 'Tanpa lapisan derivasi', + useNsec: 'Gunakan Kunci Rahasia', + footer: '🔒 Kedua metode sama amannya. Pilih sesuai preferensi Anda!', + }, + skateNip05: { + placeholder: 'namamu', + claimedSuffix: 'milik Anda — simpan profil Anda untuk menerbitkannya.', + checking: 'Memeriksa ketersediaan…', + available: '{{name}}@{{domain}} tersedia', + claim: 'Klaim', + hint: 'Huruf, angka, tanda hubung. Gratis, dan ditampilkan sebagai lencana ✓ di profil Anda.', + }, + nip05Required: { + getFree: 'Dapatkan NIP-05 gratis / murah', + paid: 'Berbayar', + requiredTitle: 'Verifikasi NIP-05 Diperlukan', + bannerReason: 'Untuk mencegah spam dan membangun kepercayaan, {{role}} memerlukan alamat Nostr terverifikasi (NIP-05).', + gateReason: 'Untuk mencegah spam dan membangun kepercayaan, {{role}} harus memiliki verifikasi NIP-05.', + addInSettings: 'Tambahkan NIP-05 di Pengaturan', + explainer: 'NIP-05 membuktikan identitas Anda dengan menautkan profil Nostr Anda ke sebuah domain — seperti', + updateProfile: 'Perbarui Profil Anda', + }, + editProfile: { + uploadSuccessTitle: 'Berhasil', + uploadSuccessDesc: '{{field}} berhasil diunggah', + uploadErrorDesc: 'Gagal mengunggah {{field}}. Silakan coba lagi.', + mustBeLoggedIn: 'Anda harus masuk untuk memperbarui profil Anda', + invalidClinkTitle: 'Kode CLINK tidak valid', + invalidClinkDesc: 'Itu tidak terlihat seperti kode noffer1… yang valid. Hapus atau tempel yang valid.', + invalidLightningTitle: 'Alamat Lightning tidak valid', + invalidLightningDesc: 'Gunakan alamat seperti email, misalnya you@walletofsatoshi.com.', + invalidSpTitle: 'Alamat Silent Payment tidak valid', + invalidSpDesc: 'Alamat Silent Payment dimulai dengan "sp1" dan cukup panjang. Hapus atau tempel yang valid.', + invalidCordnTitle: 'Tautan Cordn tidak valid', + invalidCordnDesc: 'Tempel tautan kontak Cordn https://… lengkap.', + updateSuccessTitle: 'Berhasil', + updateSuccessDesc: 'Profil Anda telah diperbarui', + updateErrorDesc: 'Gagal menerbitkan profil. Periksa koneksi relay Anda di Pengaturan > Relay', + identityTitle: 'Identitas', + identityDesc: 'Bagaimana Anda muncul di seluruh SkateSpots.', + displayName: 'Nama tampilan', + displayNamePlaceholder: 'Nama Anda', + bio: 'Bio', + bioPlaceholder: 'Beberapa kata tentang Anda dan skating Anda…', + profilePicture: 'Foto profil', + pictureDesc: 'Unggah atau tempel gambar persegi.', + bannerImage: 'Gambar spanduk', + bannerDesc: 'Gambar lebar untuk bagian atas profil Anda.', + website: 'Situs web', + bitcoinTitle: 'Bitcoin & Pembayaran', + bitcoinDesc: 'Biarkan orang men-zap, memberi tip, dan membayar Anda langsung — tanpa perantara.', + lightningAddress: 'Alamat Lightning', + lud16Invalid: 'Gunakan alamat seperti email, mis. you@yourdomain.com.', + lud16Ok: 'Mengaktifkan tombol “Zap” di profil Anda.', + lud16Hint: 'Tip Bitcoin instan. Mengaktifkan tombol “Zap” di profil Anda.', + silentPaymentAddress: 'Alamat Silent Payment', + spInvalid: 'Harus dimulai dengan “sp1” dan cukup panjang.', + spOk: 'Valid — alamat on-chain privat yang dapat digunakan ulang.', + spHint: 'Alamat on-chain statis yang dapat digunakan ulang (BIP-352). Bagikan sekali; setiap pembayaran tidak dapat ditautkan.', + clinkTipCode: 'Kode tip CLINK', + nofferInvalid: 'Itu tidak terlihat seperti kode noffer1… yang valid.', + nofferOk: 'Valid — tombol “Tip dalam Bitcoin” akan muncul di profil Anda.', + nofferHint: 'Kode CLINK self-custodial agar siapa pun dapat memberi tip kepada Anda lewat Nostr — tanpa perantara.', + skateProfileTitle: 'Profil Skate', + skateProfileDesc: 'Tunjukkan sponsor Anda dan bagaimana crew menghubungi Anda.', + badges: 'Lencana', + badgesHint: '(label + tautan opsional)', + badgeExample: 'mis. Independent Trucks', + badgeLabelPlaceholder: 'Label lencana…', + badgeUrlPlaceholder: 'https://… (opsional)', + removeBadge: 'Hapus lencana', + addBadge: 'Tambah lencana', + badgesDescBefore: 'Sponsor, shop, atau orang yang mendukung skating Anda — dan apa pun yang ingin Anda pamerkan. Masing-masing menjadi chip yang dapat diklik di profil Anda.', + badgesDescAfter: 'lencana anggota Anda ditambahkan secara otomatis.', + coordinator: 'Coordinator', + cordnInvalid: 'Itu tidak terlihat seperti coordinator. Tempel nprofile, tautan cordn.net, atau URL https://.', + cordnOk: 'Ditampilkan di profil Anda — orang lain dapat menambahkannya dengan satu ketukan.', + cordnHint: 'Coordinator Cordn yang dipakai orang lain untuk mengirim pesan kepada Anda. Privat, terenkripsi, milik Anda.', + useMyCoordinator: 'Gunakan coordinator saya', + accountTitle: 'Akun', + accountDesc: 'Pengaturan akun tambahan.', + botAccount: 'Akun bot', + botAccountDesc: 'Tandai akun ini sebagai otomatis atau bot.', + saving: 'Menyimpan…', + saveProfile: 'Simpan Profil', + nip05VerifiedHandle: 'Handle terverifikasi NIP-05', + nip05How: 'Bagaimana?', + extraHandles: 'Handle tambahan', + extraHandlesHint: 'opsional — tambahkan hingga 5', + nip05HintEmpty: 'Handle terverifikasi seperti you@yourdomain.com — versi centang biru dari Nostr. Menampilkan lencana ✓ di profil Anda dan membuka filter “Terverifikasi” di direktori Skater.', + nip05Invalid: 'Gunakan handle seperti email, mis. you@yourdomain.com — tanpa “https://” atau spasi.', + nip05Checking: 'Memeriksa domain Anda…', + nip05Verified: 'Terverifikasi — domain Anda mengonfirmasi handle ini milik Anda. ✓', + nip05Mismatch: 'Domain Anda memetakan handle ini ke kunci yang BERBEDA. Perbaiki .well-known/nostr.json agar mengarah ke akun ini.', + nip05Unreachable: 'Belum dapat menjangkau /.well-known/nostr.json domain Anda. Handle yang tersimpan tetap berfungsi setelah domain Anda diatur dengan benar.', + nip05Enter: 'Masukkan handle NIP-05 Anda.', + freeHandleBefore: 'Tidak punya domain sendiri? Klaim', + freeHandleAfter: 'handle gratis dari SkateSpots.', + uploadLabel: 'Unggah {{label}}', + previewLabel: 'Pratinjau {{label}}', + }, + security: { + recoveryCopied: 'Kode pemulihan disalin. Simpan di tempat yang aman.', + savedTitle: 'Tersimpan!', + recoveryDownloaded: 'Kode pemulihan diunduh. Simpan di tempat yang aman.', + downloadFailedTitle: 'Unduhan gagal', + downloadFailedDesc: 'Silakan salin secara manual sebagai gantinya.', + loginRequired: 'Login Diperlukan', + loginRequiredDesc: 'Masuk untuk mengakses pengaturan keamanan.', + backupConfirmedTitle: 'Cadangan Dikonfirmasi! ✅', + backupConfirmedDesc: 'Bagus! Kunci Anda aman.', + yourRecoveryCode: 'Kode Pemulihan Anda', + recoveryCodeDesc: 'Tidak menyimpannya saat mendaftar? Anda dapat mengambilnya di sini kapan saja.', + recoveryCodeBefore: 'Kode ini adalah', + only: 'satu-satunya', + recoveryCodeAfter: 'cara masuk kembali di perangkat atau peramban baru. Simpan di tempat aman (pengelola kata sandi, atau ditulis di kertas). Siapa pun yang memilikinya mengendalikan akun Anda — jangan pernah membagikannya.', + revealRecovery: 'Tampilkan kode pemulihan saya', + qrHint: 'Pindai dengan aplikasi Nostr lain untuk masuk. Jaga privasi layar ini.', + neverShareHide: '⚠️ Jangan pernah bagikan ini. Sembunyikan setelah selesai.', + hide: 'Sembunyikan', + amberNoteBefore: 'Anda masuk dengan', + amberNoteAfter: '. Kode pemulihan Anda berada di dalam Amber — buka aplikasi Amber untuk mencadangkannya. SkateSpots tidak pernah melihat kunci Anda.', + bunkerNoteBefore: 'Anda masuk dengan', + remoteSigner: 'penandatangan jarak jauh (bunker)', + bunkerNoteAfter: '. Kode pemulihan Anda dipegang oleh layanan penandatangan Anda, bukan SkateSpots. Cadangkan di sana.', + extensionNoteBefore: 'Anda masuk dengan', + browserExtension: 'ekstensi peramban', + extensionNoteAfter: '. Kode pemulihan Anda berada di ekstensi — gunakan opsi cadangan/ekspor miliknya. SkateSpots tidak pernah melihat kunci Anda.', + otherNote: 'Kode pemulihan Anda dikelola oleh aplikasi penandatangan Anda, bukan SkateSpots. Cadangkan di sana.', + backupWarningTitle: '⚠️ Sudahkah Anda mencadangkan frasa pemulihan atau kunci rahasia Anda?', + backupWarningBody: 'Kunci Anda adalah SATU-SATUNYA cara mengakses akun Anda. Jika Anda kehilangannya, Anda kehilangan segalanya - tidak ada reset kata sandi!', + iveBackedUp: 'Saya Sudah Mencadangkan Kunci Saya', + backupConfirmed: '✅ Cadangan Dikonfirmasi', + backupNotConfirmed: '⚠️ Cadangan Belum Dikonfirmasi', + backupConfirmedStatusDesc: 'Anda telah mengonfirmasi bahwa kunci Anda tercadangkan dengan aman.', + backupNotConfirmedDesc: 'Pastikan mencadangkan frasa pemulihan atau kunci rahasia Anda!', + notSavedYetBefore: 'Belum menyimpan kode pemulihan Anda? Tidak masalah — ambil dari', + notSavedYetAfter: 'bagian di atas, simpan di tempat aman, lalu konfirmasi di bawah.', + yesBackedUp: 'Ya, Saya Sudah Mencadangkan Kunci Saya', + bestPracticesTitle: 'Praktik Terbaik Keamanan Kunci', + bestPracticesDesc: 'Cara menjaga akun Nostr Anda tetap aman', + bp1Title: 'Tuliskan di kertas', + bp1Desc: 'Cadangan fisik paling aman. Simpan di lokasi aman seperti brankas.', + bp2Title: 'Beberapa cadangan', + bp2Desc: 'Simpan salinan di lokasi aman yang berbeda (brankas rumah, kotak deposit bank, dll.)', + bp3Title: 'Jangan pernah bagikan kunci Anda', + bp3Desc: 'Aplikasi Nostr asli TIDAK PERNAH meminta nsec atau frasa pemulihan Anda setelah login awal', + bp4Title: 'Jangan simpan di cloud tanpa enkripsi', + bp4Desc: 'Hindari Google Docs, draf email, atau penyimpanan cloud teks biasa', + bp5Title: 'Pertimbangkan menggunakan ekstensi peramban', + bp5Desc: 'Alby, nos2x, atau Flamingo menjaga kunci Anda tetap aman dan tidak pernah mengeksposnya ke situs web', + importantReminders: '⚠️ Pengingat Penting', + rem1: 'Jika Anda kehilangan kunci, Anda kehilangan akun secara permanen', + rem2: 'Tidak ada perusahaan atau orang yang dapat mereset kata sandi Anda - bahkan kami', + rem3: 'Siapa pun dengan kunci Anda memiliki kendali penuh atas akun Anda', + rem4: 'Kunci Anda mengendalikan semua data Nostr Anda di SEMUA aplikasi', + recommendedSigners: '🔌 Penandatangan Nostr yang Direkomendasikan', + recommendedSignersDesc: 'Gunakan penandatangan Nostr untuk keamanan dan kenyamanan lebih baik', + recommended: 'Direkomendasikan', + amberDesc: 'Penandatangan Nostr aman untuk Android. Menjaga kunci Anda tetap aman di ponsel dan menandatangani event tanpa mengeksposnya.', + albyDesc: 'Ekstensi serba lengkap dengan dompet Lightning, WebLN, dan dukungan NWC.', + flamingoDesc: 'Antarmuka sederhana dan bersih. Fokus pada penandatanganan Nostr tanpa fitur dompet.', + nos2xDesc: 'Ekstensi minimal dan ringan untuk pengguna mahir.', + nostrConnectTitle: '☁️ Nostr Connect (Penandatangan Jarak Jauh)', + nostrConnectDesc: 'Gunakan penandatangan jarak jauh untuk mengakses akun Anda dari perangkat mana pun', + nostrConnectBody: 'Nostr Connect (juga disebut "bunker") memungkinkan Anda menyimpan kunci di server aman dan masuk dari perangkat mana pun. Kunci Anda tidak pernah meninggalkan server, tetapi Anda dapat memakai akun Anda di mana saja!', + nsecAppDesc: 'Penandatangan jarak jauh gratis dan aman. Buat URI bunker:// dan tempel saat login.', + nostrumDesc: 'Opsi penandatangan jarak jauh lain dengan dukungan seluler.', + howToUse: '💡 Cara pakai:', + howToUseDesc: 'Buat akun di salah satu layanan ini, dapatkan string koneksi bunker://, lalu tempel di tab "Nostr Connect" saat login.', + }, + relayList: { + connected: 'Terhubung', + connecting: 'Menghubungkan…', + offline: 'Offline', + removeUrl: 'Hapus {{url}}', + add: 'Tambah', + publishedTitle: 'Daftar relay diterbitkan', + publishedDesc: 'Disinkronkan ke Nostr (kind 10002).', + publishFailedTitle: 'Gagal menerbitkan daftar relay', + invalidUrlTitle: 'URL relay tidak valid', + invalidUrlDesc: 'Coba sesuatu seperti wss://relay.example.com', + alreadyInList: 'Relay sudah ada di daftar Anda', + keepReadWriteTitle: 'Pertahankan baca atau tulis di', + keepReadWriteDesc: 'Relay memerlukan setidaknya salah satu dari baca/tulis.', + alreadyInThisList: 'Relay sudah ada di daftar ini', + dmPublishedTitle: 'Relay DM diterbitkan', + dmPublishedDesc: 'Kotak masuk NIP-17 diperbarui.', + dmPublishFailedTitle: 'Gagal menerbitkan relay DM', + nip65Title: 'Relay (NIP-65)', + nip65DescUser: 'Ketuk Baca / Tulis untuk mengalihkan. Diterbitkan ke Nostr sebagai daftar kind 10002 Anda.', + nip65DescLoggedOut: 'Ketuk Baca / Tulis untuk mengalihkan. Masuk untuk menerbitkan daftar Anda ke Nostr.', + noRelays: 'Belum ada relay — tambahkan satu di bawah.', + local: 'Lokal', + read: 'Baca', + readHint: 'Ambil konten dari relay ini', + write: 'Tulis', + writeHint: 'Terbitkan event Anda ke relay ini', + dmTitle: 'Relay kotak masuk DM', + dmDesc: 'Tempat Anda menerima pesan langsung NIP-17 (kind 10050). Kembali ke relay tulis Anda saat kosong.', + localTitle: 'Relay lokal', + localDesc: 'Hanya aplikasi (mis. node LAN). Digunakan untuk baca dan tulis; tidak pernah diterbitkan.', + blockedTitle: 'Relay diblokir', + blockedDesc: 'Jangan pernah terhubung ke ini — dikecualikan dari setiap baca dan tulis.', + }, + relatr: { + searchingTitle: 'Mencari layanan Relatr...', + searchingDesc: 'Menanyakan Nostr untuk profil Relatr', + foundTitle: 'Layanan Relatr ditemukan!', + foundDesc: 'Layanan: {{name}}', + unknown: 'Tidak diketahui', + notFoundTitle: 'Tidak ada layanan Relatr ditemukan', + notFoundDesc: 'Coba masukkan pubkey secara manual atau periksa https://www.relatr.xyz/', + searchFailedTitle: 'Pencarian gagal', + searchFailedDesc: 'Tidak dapat menanyakan Nostr untuk profil Relatr', + invalidPubkeyTitle: 'Pubkey tidak valid', + invalidPubkeyDesc: 'Silakan masukkan pubkey hex 64 karakter yang valid', + enabledTitle: 'Relatr diaktifkan!', + enabledDesc: 'Skor kepercayaan global kini aktif.', + disabledTitle: 'Relatr dinonaktifkan', + disabledDesc: 'Skor kepercayaan tidak lagi diambil.', + title: 'Skor Kepercayaan Relatr', + desc: 'Skor kepercayaan global membantu mengidentifikasi pengguna andal dan mengurangi spam', + status: 'Status', + active: 'Aktif', + disabled: 'Nonaktif', + activeStrong: 'Relatr aktif.', + activeDesc: 'Skor kepercayaan dari analisis jaringan global ContextVM membantu mengidentifikasi skater andal dan mengurangi spam.', + disabledStrong: 'Relatr dinonaktifkan.', + disabledHint: 'Aktifkan untuk mendapatkan skor kepercayaan dari jaringan Nostr global.', + disable: 'Nonaktifkan Relatr', + enable: 'Aktifkan Relatr', + advancedSettings: 'Pengaturan Lanjutan', + servicePubkey: 'Pubkey Layanan Relatr', + pubkeyPlaceholder: 'Masukkan pubkey hex 64 karakter...', + searching: 'Mencari...', + autoDiscover: 'Temukan Otomatis', + pubkeyDefault: 'Default: layanan Relatr resmi ContextVM (npub1dvmc...)', + relayLabel: 'Relay (tempat Relatr menerbitkan skor)', + relayDefault: 'Default: wss://relay.contextvm.org (relay resmi ContextVM)', + applyChanges: 'Terapkan Perubahan', + learnMore: 'Pelajari Lebih Lanjut:', + website: 'Situs Web Relatr', + github: 'GitHub Relatr', + nip85Spec: 'Spesifikasi NIP-85', + }, + followList: { + unfollow: 'Berhenti mengikuti', + title: 'Jaringan Nostr Anda', + desc: 'Kelola siapa yang Anda ikuti. Mengikuti pengguna membantu membangun Web of Trust Anda dan menentukan spot mana yang menampilkan lencana kepercayaan.', + following: 'Mengikuti ({{count}})', + followers: 'Pengikut ({{count}})', + follow: 'Ikuti', + followHint: '💡 Tempel pubkey Nostr (npub1...), alamat NIP-05 (user@domain.com), atau pubkey hex', + notFollowing: 'Anda belum mengikuti siapa pun', + notFollowingHint: 'Ikuti skater untuk melihat spot mereka dengan lencana ✅ TERVERIFIKASI', + trustActiveStrong: '✅ Lencana Kepercayaan Aktif:', + trustActive: 'Spot yang dibuat oleh orang yang Anda ikuti kini akan menampilkan lencana TERVERIFIKASI. Spot dari teman mereka akan menampilkan lencana TERPERCAYA.', + noFollowers: 'Belum ada pengikut', + noFollowersHint: 'Bagikan profil Nostr Anda untuk mendapatkan pengikut!', + howTitle: '💡 Bagaimana Mengikuti Mempengaruhi Lencana Kepercayaan', + verifiedStrong: '✅ TERVERIFIKASI (Hijau):', + verifiedDesc: 'Spot yang dibuat oleh orang yang Anda ikuti langsung', + trustedStrong: '🟡 TERPERCAYA (Kuning):', + trustedDesc: 'Spot yang dibuat oleh orang yang diikuti teman Anda (2 lompatan)', + unverifiedStrong: '⚪ Tidak Terverifikasi:', + unverifiedDesc: 'Spot dari pengguna tanpa koneksi ke jaringan Anda', + tip: '💡 Tip: Ikuti skateboarder aktif untuk melihat lebih banyak spot terverifikasi dan membangun jaringan kepercayaan Anda!', + }, + notify: { + enableTitle: 'Aktifkan notifikasi', + enableDesc: 'Getarkan perangkat ini saat ada yang membutuhkan Anda.', + checkingPermission: 'Memeriksa izin…', + unsupported: 'Perangkat ini tidak mendukung notifikasi di sini. Bangun ulang aplikasi Android untuk mengaktifkannya di ponsel Anda.', + denied: 'Notifikasi diblokir untuk situs ini. Izinkan di pengaturan peramban/OS Anda, lalu coba lagi.', + backgroundTitle: 'Notifikasi latar belakang', + backgroundDesc: 'Dapatkan ping untuk pesan dan trade bahkan saat SkateSpots ditutup.', + pushUnsupported: 'Peramban ini tidak mendukung push latar belakang. Di seluler, tambahkan SkateSpots ke layar utama Anda.', + pushPrivacy: 'Untuk menjangkau Anda saat tertutup, server notifikasi SkateSpots mendapat ping dari relay Anda saat ada sesuatu tiba untuk kunci Anda dan meneruskannya ke layanan push ponsel Anda. Ia hanya melihat bahwa kunci Anda memiliki sesuatu — tidak pernah siapa pengirimnya atau apa isinya, dan tidak dapat mendekripsi pesan Anda. Aktifkan per perangkat.', + bgDeliveryTitle: 'Pengiriman latar belakang (Android)', + bgDeliveryDesc: 'Periksa pesan, penawaran, dan trade baru saat aplikasi ditutup — tanpa layanan Google.', + off: 'Nonaktif', + standard: 'Standar (~15 mnt)', + fast: 'Cepat (~5 mnt)', + bgDeliveryNote: 'Standar bersifat best-effort — Android dapat menundanya saat Doze. Cepat menampilkan notifikasi tetap dan lebih boros baterai. Tidak ada yang didekripsi di server kami.', + notifyMeAbout: 'Beri tahu saya tentang', + couldNotEnable: 'Tidak dapat mengaktifkan', + sendTest: 'Kirim notifikasi uji', + testTitle: 'Notifikasi SkateSpots aktif 🛹', + testBody: 'Beginilah tampilan DM, zap, atau undangan crew.', + footerBefore: 'Peringatan dibuat di perangkat Anda dari data yang sudah dimiliki aplikasi, dan peringatan pesan langsung tidak pernah mendekripsi pesan Anda — jadi Amber tidak pernah diminta membukanya. Dengan', + footerAfter: 'nonaktif, aplikasi yang benar-benar tertutup tidak dapat dijangkau, jadi peringatan tiba saat Anda membuka SkateSpots berikutnya.', + cat_dms_label: 'Pesan langsung', + cat_dms_hint: 'Seseorang mengirimi Anda pesan privat', + cat_crew_label: 'Crew', + cat_crew_hint: 'Undangan, permintaan bergabung, dan konfirmasi keanggotaan', + cat_social_label: 'Zap, balasan & sebutan', + cat_social_hint: 'Reaksi, repost, zap, balasan, dan pembaruan event', + cat_newsletter_label: 'Buletin', + cat_newsletter_hint: 'Rilis SkateSpots baru (hanya pelanggan)', + cat_trades_label: 'Penawaran & trade', + cat_trades_hint: 'Penawaran, penawaran balik, dan konfirmasi trade', + cat_reminders_label: 'Pengingat event', + cat_reminders_hint: 'Pengingat satu jam sebelum event yang akan Anda hadiri (aplikasi Android)', + }, + regionBackfill: { + taggedTitle: 'Menandai {{count}} lokasi{{s}}', + taggedSkipped: '{{count}} dilewati (tanpa koordinat atau tanpa hasil geocoder).', + taggedOk: 'Tag wilayah ditulis ke community relay.', + nothingTitle: 'Tidak ada yang perlu ditandai', + nothingDesc: 'Tidak ada pin yang dapat di-geocode. Coba lagi nanti.', + failedTitle: 'Backfill gagal', + title: 'Backfill tag wilayah', + admin: 'Admin', + descBefore: 'Pin yang dibuat sebelum geocoding ada memiliki koordinat tetapi tanpa tag kota/negara, sehingga peta menggambarnya sementara Community Stats hanya bisa mengatakan “Tidak terkategorikan”. Ini menurunkan ulang tag dari setiap pin dan menerbitkan kembali', + descStrong: 'milik Anda sendiri', + descAfter: 'spot & shop yang belum bertag.', + scanning: 'Memindai spot Anda…', + allTagged: 'Setiap spot & shop milik Anda sudah memiliki tag wilayah. 🎉 Pin “Tidak terkategorikan” yang tersisa milik mapper lain — hanya kunci mereka sendiri yang dapat menandainya.', + countLine: '{{count}} spot{{s}}/shop Anda tidak memiliki tag wilayah. Penandatangan Anda mungkin meminta persetujuan untuk masing-masing.', + tagging: 'Menandai {{done}}/{{total}}…', + run: 'Backfill tag wilayah', + summary: '{{updated}} diperbarui · {{skipped}} dilewati · {{failed}} gagal', + }, + adminReview: { + title: 'Antrean review', + flagged: '{{count}} spot{{s}} memicu sinyal sampah — sembunyikan atau abaikan.', + clean: 'Spot yang terlihat seperti entri uji atau pin di luar topik.', + }, + grantPro: { + invalidNpub: 'Masukkan npub (atau pubkey hex) yang valid', + invalidDays: 'Hari harus berupa angka positif', + grantedTitle: 'Pro diberikan ⚡', + grantedDesc: '{{npub}} hingga {{date}}', + failedTitle: 'Pemberian gagal', + title: 'Berikan Sasquatch Pro', + owner: 'Pemilik', + desc: 'Fallback manual untuk pembayaran terverifikasi yang terlewat oleh zap receipt. Menerbitkan pemberian yang ditandatangani pemilik; pengguna tidak dapat memalsukannya.', + targetPlaceholder: 'npub1… (atau hex)', + grant: 'Berikan', + }, + myData: { + reactionTitle: 'Reaksi {{emoji}}', + deleting: 'Menghapus...', + requestDeletion: 'Minta Penghapusan', + selectContentTitle: 'Pilih Konten untuk Dihapus', + selectContentDesc: 'Pilih item tertentu yang ingin Anda minta penghapusannya.', + all: 'Semua', + spots: 'Spot', + events: 'Event', + shops: 'Shop', + listings: 'Listing', + collections: 'Koleksi', + lab: 'Lab', + posts: 'Pos', + reactions: 'Reaksi', + selectAll: 'Pilih Semua', + selectAllVisible: 'Pilih Semua yang Terlihat', + selectedCount: '{{count}} dipilih', + noItemsCategory: 'Tidak ada item di kategori ini', + decentralizedStrong: 'Penting:', + decentralizedNote: 'Nostr bersifat terdesentralisasi. Relay seharusnya menghormati permintaan penghapusan, tetapi sebagian mungkin tidak. Ini bukan penghapusan permanen yang dijamin.', + deleteCount: 'Hapus {{count}} Item{{s}}', + noDataTitle: 'Tidak ada data untuk diekspor', + noDataDesc: 'Anda belum menerbitkan event apa pun.', + exportedTitle: 'Data diekspor!', + exportedDesc: 'Mengunduh {{count}} event sebagai JSON.', + deletionRequestedTitle: 'Penghapusan diminta', + deletionRequestedDesc: 'Permintaan penghapusan telah diterbitkan ke relay.', + deletionRequestedMany: 'Meminta penghapusan {{count}} item. Catatan: Sebagian relay mungkin tidak menghormati permintaan ini.', + deletionFailedTitle: 'Penghapusan gagal', + deletionFailedDesc: 'Tidak dapat menerbitkan permintaan penghapusan. Silakan coba lagi.', + loginRequired: 'Login Diperlukan', + loginRequiredDesc: 'Masuk untuk melihat dan mengelola data Anda.', + title: 'Data Saya', + desc: 'Konten Anda di jaringan Nostr. Anda memiliki data ini - ekspor kapan saja atau minta penghapusan.', + coachFilmer: 'Coach/Filmer', + zaps: 'Zap', + received: 'Diterima', + exportAll: 'Ekspor Semua Data', + recentActivity: 'Aktivitas Terbaru', + viewAll: 'Lihat Semua ({{count}})', + noDataPublished: 'Belum ada data yang diterbitkan', + startBy: 'Mulai dengan', + addingASpot: 'menambahkan spot', + aboutYourData: 'Tentang Data Anda', + ownDataStrong: 'Anda memiliki data Anda.', + ownData: 'Semua konten ditandatangani dengan kunci kriptografis Anda dan disimpan di relay Nostr. Tidak ada perusahaan yang mengendalikannya.', + exportAnytimeStrong: 'Ekspor kapan saja', + exportAnytime: '- Unduh semua event Anda sebagai JSON', + portableStrong: 'Portabel', + portable: '- Gunakan kunci Anda di aplikasi Nostr apa pun', + selectiveStrong: 'Penghapusan selektif', + selective: '- Pilih dengan tepat apa yang akan dihapus', + caveatStrong: 'Catatan terdesentralisasi', + caveat: '- Sebagian relay mungkin menyimpan data meskipun ada permintaan penghapusan', + }, + settingsPage: { + seoTitle: 'Pengaturan - SkateSpots', + seoDescription: 'Kelola pengaturan akun SkateSpots Anda.', + heading: 'PENGATURAN', + subtitle: 'Preferensi akun dan aplikasi', + editProfile: 'Edit Profil', + profileRefreshed: 'Profil diperbarui!', + found: 'Ditemukan: {{name}}', + unnamed: 'tanpa nama', + profileNotFound: 'Profil tidak ditemukan', + notFoundOnRelay: 'Tidak ditemukan di relay mana pun.', + refreshFailed: 'Penyegaran gagal', + refreshFailedDesc: 'Tidak dapat terhubung ke relay.', + loginToEdit: 'Masuk untuk mengedit profil Anda', + noProfileRelays: 'Kami tidak dapat menemukan profil di relay. Jika Anda pernah mengaturnya, coba segarkan.', + checkDisplayName: 'nama tampilan', + checkPhoto: 'foto profil', + checkBio: 'bio singkat', + checkLightning: 'alamat Lightning agar orang dapat men-zap Anda', + checkHandle: 'handle @skate-spots.org gratis', + finishProfile: 'Lengkapi profil Anda', + addItem: 'Tambah {{item}}', + nip05Title: 'Verifikasi NIP-05', + nip05Desc: 'Dapatkan alamat Nostr terverifikasi (seperti name@domain.com) untuk membangun kepercayaan. Diperlukan untuk membuat event, profil coaching, dan shop.', + freeFromSkateSpots: 'Gratis dari SkateSpots', + claimHandleBefore: 'Klaim handle seperti', + claimHandleAfter: '— tanpa pendaftaran, tanpa biaya, tanpa domain yang harus dijalankan. Klaim di tab Profil, lalu simpan.', + claimInProfile: 'Klaim di Profil', + nip05Footer: 'Setelah mendapatkan NIP-05 Anda, tambahkan di kolom Profil dan simpan.', + localRelayOn: 'Relay lokal aktif', + localRelayOff: 'Relay lokal nonaktif', + lookingForCitrine: 'Mencari Citrine di perangkat ini…', + noLongerUsing: 'Tidak lagi menggunakan relay di perangkat.', + localRelay: 'Relay Lokal', + citrineOff: 'Pembacaan lebih cepat & cadangan offline di perangkat ini', + citrineSearching: 'Mencari Citrine di perangkat ini…', + citrineLive: 'Terhubung — membaca & mencadangkan secara lokal', + citrineWaiting: 'Diaktifkan — mulai Citrine untuk terhubung', + toggleCitrine: 'Alihkan relay Citrine lokal', + citrineDetected: 'Relay Citrine terdeteksi', + citrineLooking: 'Mencari Citrine…', + citrineNotDetected: 'Citrine tidak terdeteksi', + recheckCitrine: 'Periksa ulang relay Citrine', + checking: 'Memeriksa', + recheck: 'Periksa ulang', + chipInstantReads: 'Pembacaan instan', + chipWorksOffline: 'Bekerja offline', + chipOnDeviceBackup: 'Cadangan di perangkat', + cantReachStrong: 'Tidak dapat menjangkau Citrine.', + cantReachBefore: 'Pastikan aplikasi Citrine gratis terpasang dan relay-nya', + started: 'dimulai', + cantReachAfter: ', lalu ketuk Periksa ulang. Ia menjalankan relay Nostr privat di ponsel Anda untuk pembacaan instan dan cadangan offline.', + citrineStep1Before: 'Buka Citrine → ketuk', + start: 'Mulai', + citrineStep2Before: 'Kembali ke sini → ketuk', + getCitrine: 'Dapatkan Citrine', + citrinePrivacy: 'Stash dan pesan Anda tetap terenkripsi end-to-end di sini, sama seperti di tempat lain. Relay lokal hanya mempercepat dan menyimpan salinan di perangkat Anda — ia tidak pernah menggantikan enkripsi.', + communityRelayDisabled: 'Community relay dinonaktifkan', + communityRelayEnabled: 'Community relay diaktifkan', + usingOnlyPersonal: 'Hanya menggunakan relay yang Anda konfigurasi.', + skateRelayIncluded: 'Relay SkateSpots disertakan.', + relays: 'Relay', + relayPrivacyBefore: 'Relay dapat melihat', + ipAddress: 'alamat IP', + relayPrivacyAfter: 'Anda saat Anda terhubung. Tor menyembunyikannya — dan anggap VPN "gratis" sebagai tanda bahaya; mereka biasanya memonetisasi trafik Anda.', + communityRelay: 'Community Relay', + syncingGlobal: 'Menyinkronkan dengan komunitas skate global', + usingOnlyPersonalShort: 'Hanya menggunakan relay pribadi', + appearance: 'Tampilan', + language: 'Bahasa', + darkModeOnly: 'Hanya Mode Gelap', + darkModeDesc: 'SkateSpots menjalankan estetika neon gelap yang terinspirasi budaya skate. Latar hitam, neon pink, lime, dan oranye.', + navigation: 'Navigasi', + sasquatchExpanded: 'Sasquatch telah diperluas! 🦧 Segarkan halaman untuk melihatnya.', + advanced: 'Lanjutan', + sasquatchGuide: '🦧 Panduan Sasquatch', + sasquatchResetDesc: 'Atur ulang panduan onboarding ke tampilan diperluas', + expandSasquatch: 'Perluas The Sasquatch', + wallet: 'Dompet', + loginToWallet: 'Masuk untuk mengelola dompet Anda', + openWallet: 'Buka Dompet', + balanceSendReceive: 'Saldo, kirim, terima', + connectNwc: 'Hubungkan Dompet NWC', + account: 'Akun', + security: 'Keamanan', + securitySub: 'Kunci, penandatanganan, Amber', + nip05Sub: 'Dapatkan alamat Nostr terverifikasi', + app: 'Aplikasi', + myStash: 'Stash Saya', + myStashSub: 'Inventaris gear privat', + relaysSub: 'Koneksi relay Nostr', + appearanceSub: 'Bahasa dan tema', + assistant: 'Asisten', + showSasquatch: 'Tampilkan asisten Sasquatch', + showSasquatchDesc: 'Tampilkan tombol Sasquatch mengambang di peta dan layar lain.', + showMapFooter: 'Tampilkan bilah tautan peta', + showMapFooterDesc: 'Tampilkan strip tautan tipis di bagian bawah peta.', + notifications: 'Notifikasi', + notificationsSub: 'Peringatan untuk DM, crew, dan zap', + coordinator: 'Coordinator', + coordinatorSub: 'Server grup Cordn Anda', + data: 'Data', + myData: 'Data Saya', + myDataSub: 'Ekspor, impor, kelola', + advancedSub: 'Relatr, Sasquatch, alat', + notLoaded: 'Tidak dimuat', + notLoggedIn: 'Belum masuk', + }, + onboarding: { + seoTitle: 'Mulai — SkateSpots', + seoDescription: 'Bergabunglah dengan komunitas skateboard terdesentralisasi. Temukan spot, terhubung dengan coach, kirim zap. Gratis selamanya.', + homeSetTitle: 'Area rumah diatur 🛹', + homeSetDesc: 'Peta sekarang akan terbuka di area Anda.', + locationFailedTitle: 'Tidak dapat memperoleh lokasi Anda', + locationFailedDesc: 'Periksa izin lokasi, atau pilih area Anda dari peta.', + niceTitle: '🎉 Keren!', + niceDesc: 'Anda sekarang memahami cara kerja Nostr. Ayo skate!', + npubCopied: 'npub disalin ke papan klip.', + saveLoginNow: 'Simpan login Anda — lakukan sekarang', + saveLoginNowDesc: 'Kode pemulihan Anda adalah satu-satunya cara kembali ke akun Anda. Tanpa email, tanpa reset kata sandi.', + betaBadge: 'Beta — Terbuka untuk skater di seluruh dunia', + headline1: 'SKATE', + headline2: 'DUNIA ANDA', + heroBefore: 'Sebuah', + decentralized: 'terdesentralisasi', + heroAfter: 'komunitas skate. Tidak ada perusahaan yang memilikinya. Tidak ada algoritma yang mengubur spot Anda. Tidak ada ban hammer. Hanya skater.', + pillMap: 'Peta spot', + pillCoaches: 'Coach & filmer', + pillEvents: 'Event', + pillGear: 'Beli/jual gear', + pillZaps: 'Zap Bitcoin', + pillStash: 'Stash gear', + pillCrews: 'Crew', + createFreeAccount: 'Buat akun gratis Anda', + noEmailNoPassword: 'Tanpa email. Tanpa kata sandi. Miliki identitas Anda selamanya.', + findSpots: 'Temukan Spot di Dekat Anda', + addFirstSpot: 'Tambahkan Spot Pertama Anda', + accountCreated: 'Anda berhasil masuk! Akun dibuat ✓', + identityYours: 'Identitas Anda milik Anda — tersimpan di kunci Anda, bukan di server kami.', + whereSkate: 'Di mana Anda skate?', + whereSkateDesc: 'Atur area rumah sekali dan peta terbuka di spot Anda setiap saat. GPS Anda tidak pernah meninggalkan perangkat.', + useMyLocation: 'Gunakan lokasi saya', + pickOnMap: 'Pilih di peta', + loginSaved: 'Login tersimpan — akun Anda aman untuk dipulihkan.', + whyBother: 'Mengapa repot-repot?', + why1Title: 'Setiap spot, satu peta', + why1Body: 'Ledge, rail, DIY, park — dipetakan oleh skater yang benar-benar menaikinya. Periksa status sebelum berangkat agar tidak menyia-nyiakan sesi karena bust.', + why2Title: 'Dibuat oleh skater, bukan orang berdasi', + why2Body: 'Tanpa iklan, tanpa algoritma yang menyodorkan sampah ke wajah Anda, tanpa panen data. Sumber terbuka. Peta milik komunitas — termasuk Anda.', + why3Title: 'Dibayar untuk tampil', + why3Body: 'Petakan permata, rekam banger, jalankan sesi — dan dapatkan zap Bitcoin nyata langsung ke dompet Anda. Tanpa potongan platform, tanpa perantara.', + why4Title: 'Akun Anda benar-benar milik Anda', + why4Body: 'Satu kunci memasukkan Anda ke setiap aplikasi Nostr. Tidak ada perusahaan yang dapat mengunci Anda atau menghapus akun Anda sesuka hati. Bawa identitas Anda ke mana saja.', + everythingFree: 'Semua yang dapat Anda lakukan — gratis', + featSpots: 'Temukan Spot', + featSpotsDesc: 'Peta interaktif dengan ribuan spot di seluruh dunia', + featLab: 'The Lab', + featLabDesc: 'Temukan coach, filmer & editor video di dekat Anda', + featEvents: 'Event', + featEventsDesc: 'Kompetisi, sesi, meetup', + featGear: 'Beli / Jual Gear', + featGearDesc: 'Marketplace peer-to-peer untuk gear skate bekas', + featStash: 'Stash Saya', + featStashDesc: 'Inventaris terenkripsi privat dari semua yang Anda miliki', + featCrews: 'Crew', + featCrewsDesc: 'Berjalan dengan crew Anda — spot bersama, chat & sesi', + whatIsNostr: 'Apa itu Nostr?', + whatIsNostrSub: 'Protokol yang menggerakkan SkateSpots', + nostrBefore: 'Nostr adalah protokol terbuka — seperti email, tetapi untuk aplikasi sosial. Akun Anda adalah', + cryptoKeyPair: 'pasangan kunci kriptografis', + nostrAfter: 'yang Anda miliki. Tidak ada perusahaan tunggal yang mengendalikan akun atau data Anda — Anda memilih relay mana yang menyimpannya, dan Anda bahkan dapat menjalankan milik Anda sendiri. Identitas Anda berfungsi di setiap aplikasi Nostr.', + nostrPoint1: 'Anda memiliki data & kunci Anda', + nostrPoint2: 'Tidak ada perusahaan yang dapat mem-ban Anda', + nostrPoint3: 'Identitas berfungsi di mana saja', + nostrPoint4: 'Tip Bitcoin langsung', + deepDive: 'Selami lebih dalam: Cara kerja Nostr', + privacyTip: 'Tip privasi: GPS Anda tidak pernah meninggalkan perangkat. Server yang Anda hubungi (seperti tile peta) masih dapat melihat IP Anda — jika ingin menyembunyikannya juga, VPN atau Tor bisa. Sepenuhnya opsional.', + readPrivacy: 'Baca halaman privasi kami', + zapsWallet: '⚡ Zap & Dompet', + optional: 'Opsional', + walletDesc: 'Zap adalah tip Bitcoin yang Anda kirim langsung ke skater yang menambahkan spot keren, merekam klip banger, atau menjalankan sesi hebat. Tanpa biaya platform. Tanpa perantara. 100% untuk mereka.', + builtInWallet: 'Dompet Cashu bawaan', + builtInWalletDesc: 'Terima pembayaran Lightning langsung di aplikasi. Tanpa penyiapan.', + balance: 'Saldo', + connectExternal: 'Hubungkan dompet eksternal', + connectExternalDesc: 'Punya Alby, Mutiny, atau dompet lain? Hubungkan via NWC.', + connectViaNwc: 'Hubungkan via NWC', + loginToConnect: 'Masuk untuk menghubungkan dompet Anda sendiri.', + fiveDollars: '💡 $5 Bitcoin = ratusan zap untuk dibagikan ke komunitas', + commonQuestions: 'Pertanyaan umum', + faq1Q: 'Apakah SkateSpots gratis?', + faq1A: '100% gratis. Jelajahi spot, tambahkan lokasi, temukan coach, buat event, ikuti sesi — semua gratis, selamanya. Bitcoin (zap) opsional jika Anda ingin memberi tip ke kreator.', + faq2Q: 'Apa itu Nostr dan mengapa SkateSpots menggunakannya?', + faq2Before: 'Nostr adalah protokol terbuka untuk aplikasi terdesentralisasi — anggap seperti internet itu sendiri, tidak dimiliki perusahaan mana pun. Akun SkateSpots Anda adalah pasangan kunci kriptografis yang', + faq2Strong: 'Anda miliki', + faq2After: '. Tidak ada perusahaan tunggal yang dapat mem-ban akun Anda atau menyandera data Anda — Anda memilih relay mana yang menyimpan data Anda, dan Anda bahkan dapat menjalankan milik Anda sendiri. Identitas Anda juga berfungsi di aplikasi Nostr lain seperti Primal, Damus, atau Amethyst.', + faq3Q: 'Apa itu nsec dan mengapa penting?', + faq3Before: 'Anda', + faq3Mid: 'adalah kunci privat Anda — satu-satunya bukti bahwa akun itu milik Anda. Berbeda dengan kata sandi, tidak ada', + faq3Strong: 'tidak ada "lupa kata sandi saya"', + faq3After: '. Jika Anda kehilangan nsec, akun Anda hilang selamanya. Saat membuat akun, unduh cadangan Anda segera dan simpan di tempat aman (pengelola kata sandi, ditulis offline).', + faq4Q: 'Penandatangan / aplikasi apa yang berfungsi dengan SkateSpots?', + faq4Desktop: 'Di desktop:', + faq4Extensions: 'ekstensi peramban.', + faq4Android: 'Di Android:', + faq4AndroidAfter: '(pengalaman terbaik dengan aplikasi native).', + faq4Ios: 'Di iOS:', + faq4IosAfter: 'atau tempel nsec Anda langsung (kurang aman).', + faq4Note: 'Anda juga dapat masuk dengan menempelkan nsec langsung — tetapi menggunakan ekstensi penandatangan lebih aman.', + faq5Q: 'Bisakah saya menggunakan SkateSpots di ponsel?', + faq5Before: 'Bisa! SkateSpots adalah PWA (Progressive Web App). Kunjungi', + faq5Mid: 'di peramban ponsel Anda dan ketuk', + faq5Em: '"Add to Home Screen"', + faq5After: 'untuk pengalaman aplikasi penuh. Atau unduh dari', + faq5End: '— toko aplikasi terdesentralisasi.', + faq6Q: 'Apa itu zap?', + faq6A: 'Zap adalah tip Bitcoin instan yang dikirim melalui Lightning Network. Saat Anda men-zap skater, sats masuk ke dompet mereka dalam hitungan detik — tanpa PayPal, tanpa Venmo, tanpa potongan. Orang yang merekam 4-stair itu dibayar langsung oleh penggemar.', + faq7Q: 'Apakah spot saya akan terhapus jika SkateSpots tutup?', + faq7A: 'Tidak. Spot Anda diterbitkan ke relay Nostr — server terdistribusi yang dapat dijalankan siapa saja. Bahkan jika SkateSpots sebagai produk hilang besok, data Anda akan tetap ada di relay dan klien Nostr mana pun dapat menampilkannya.', + faq8Q: 'Bisakah saya menambahkan spot yang berada di properti privat?', + faq8A: 'Bisa, tetapi gunakan akal sehat. Spot di properti privat harus ditandai sesuai agar skater tahu keadaannya. SkateSpots tidak bertanggung jawab atas pelanggaran batas — selalu hormati pemilik dan warga lokal.', + faq9Q: 'Bagaimana cara melaporkan bug atau memberi masukan?', + faq9Before: 'DM tim SkateSpots langsung di Nostr, atau hubungi koordinator beta kami:', + faq9Link: 'Masukan beta → cordn.net', + readyToShred: 'SIAP SHRED?', + stopScrolling: 'Berhenti menggulir. Dapatkan aplikasinya. Temukan spot. Skate.', + exploreSpots: 'Jelajahi Spot', + betaFeedbackTitle: 'Beta — Kami ingin masukan Anda', + betaFeedbackDesc: 'SkateSpots sedang dalam pengembangan aktif. Anda mungkin menemui kekasaran — itu salah kami, bukan Anda. Laporkan bug, usulkan fitur, beri tahu kami apa yang buruk.', + betaCoordinator: 'Koordinator Beta', + betaCoordinatorDesc: 'cordn.net → kirim pesan', + dmOnNostr: 'DM di Nostr', + fixSameDay: 'Menemukan bug? Kami perbaiki di hari yang sama. Laporan Anda membuat aplikasi lebih baik untuk setiap skater.', + relaySetup: 'Penyiapan relay', + }, + relayEdu: { + understandingNostr: 'Memahami Nostr', + stepOf: 'Langkah {{current}} dari {{total}}', + step1Title: 'Memahami Relay', + step1Desc: 'Bayangkan relay seperti skate shop yang berbagi kabar tentang spot', + you: 'Anda', + relays: 'Relay', + skaters: 'Skater', + s1Good1: 'Tidak ada perusahaan yang memiliki akun Anda', + s1Good1Desc: 'Identitas Anda berada di beberapa server relay', + s1Good2: 'Anda mengendalikan tempat data Anda disimpan', + s1Good2Desc: 'Pos Anda disinkronkan di relay yang Anda pilih — pilih milik Anda, atau jalankan sendiri', + s1Warn: 'Operator relay dapat melihat pos publik', + s1WarnDesc: 'Anggap seperti memasang di papan pengumuman', + step2Title: 'Publik vs Privat', + step2Desc: 'Ketahui apa yang terlihat dan apa yang terenkripsi', + publicTitle: 'Publik (Siapa pun Dapat Melihat)', + pub1: 'Spot yang Anda tambahkan ke peta', + pub2: 'Ulasan dan komentar', + pub3: 'Info profil Anda (nama, gambar)', + pub4: 'Siapa yang Anda ikuti', + privateTitle: 'Privat (Terenkripsi)', + priv1: 'Pesan langsung', + priv2: 'Komunikasi dompet', + noteStrong: 'Catatan:', + note: 'Pos mungkin disimpan permanen di relay. Pikir dulu sebelum memposting - sama seperti kehidupan nyata!', + step3Title: 'Kunci Anda = Akun Anda', + step3Desc: 'Ini adalah hal paling penting untuk dipahami', + secretKeyTitle: 'Kunci Rahasia Anda (nsec)', + secretKeyDesc: 'Anggap seperti skateboard Anda - jangan pernah meminjamkannya ke siapa pun. Ini membuktikan akun itu milik Anda.', + s3Bad1: 'Jika hilang, akun Anda tidak dapat dipulihkan', + s3Bad2: 'Tidak ada "lupa kata sandi" - tidak ada yang dapat meresetnya', + s3Good: 'Cadangkan dan simpan dengan aman', + publicKeyTitle: 'Kunci Publik Anda (npub)', + publicKeyDesc: 'Ini seperti nama pengguna Anda - bagikan dengan bebas agar orang lain dapat menemukan Anda!', + inControl: '🔐 Anda yang mengendalikan - tidak ada perusahaan yang dapat mengunci Anda!', + skip: 'Lewati', + gotIt: 'Mengerti!', + }, + about: { + seoTitle: 'Tentang - SkateSpots', + seoDescription: 'Pelajari tentang SkateSpots dan misi kami membangun komunitas skateboard terdesentralisasi.', + npubCopied: 'npub disalin ke papan klip. Tempel di klien Nostr favorit Anda untuk mengirim DM.', + bugReport: '🐛 Laporan Bug', + bugWhatHappened: 'Apa yang terjadi:', + bugExpected: 'Apa yang saya harapkan:', + bugSteps: 'Langkah mereproduksi:', + aboutWord: 'TENTANG', + heroBefore: 'Terhubung dengan scene skate lokal di seluruh dunia.', + skaterOwned: 'Data milik skater', + heroAfter: ', relay yang dijalankan komunitas.', + viewStats: 'Lihat Statistik Komunitas', + missionTitle: 'Misi Kami', + mission1: 'SkateSpots membantu skateboarder menemukan spot, terhubung dengan pro di The Lab, dan mengatur sesi - semua tanpa kendali korporat. Skating sesungguhnya terjadi offline, alat ini hanya menghubungkan Anda ke sana.', + mission2: 'Pengetahuan skateboarding seharusnya hidup bersama komunitas, bukan terkunci di aplikasi korporat. Itulah sebabnya SkateSpots berjalan di Nostr - sistem berbasis relay di mana skater mengendalikan data mereka sendiri, memilih relay mana yang menyimpannya, dan bahkan dapat menjalankan milik mereka sendiri. Tidak ada perusahaan tunggal yang memiliki peta.', + whyNostr: 'Mengapa Nostr?', + why1Title: 'Dikendalikan Komunitas', + why1Desc: 'Spot Anda berada di relay komunitas. Skater yang menjalankan server, bukan korporasi.', + why2Title: 'Anda Memiliki Data Anda', + why2Desc: 'Identitas Nostr Anda milik Anda. Bawa ke aplikasi Nostr apa pun - tanpa lock-in.', + why3Title: 'Integrasi Bitcoin', + why3Desc: 'Zap kreator langsung dengan Bitcoin. Tanpa platform yang mengambil 30%.', + why4Title: 'Sumber Terbuka', + why4Desc: 'Dibangun secara terbuka. Siapa pun dapat berkontribusi atau mem-fork kodenya.', + getInvolved: 'Ikut Terlibat', + getInvolvedDesc: 'SkateSpots bersumber terbuka dan digerakkan komunitas. Kontribusikan kode, bagikan spot, atau bantu orang lain memulai.', + betaTitle: 'Pengujian Beta', + betaDesc: 'Pengguna Terkasih! Terima kasih telah menguji beta SkateSpots. Perlu diketahui bahwa aplikasi masih dalam beta, dan mungkin ada bug atau masalah keamanan. Jika Anda menemui masalah atau ingin melaporkan bug/masalah, silakan hubungi kami!', + giveFeedback: 'Beri kami masukan:', + copyNpub: 'Salin npub', + reportBug: 'Laporkan Bug', + viewProfile: 'Lihat Profil', + downloadApp: 'Unduh Aplikasinya', + downloadAppDesc: 'Pasang SkateSpots di Android melalui Zapstore — toko aplikasi sumber terbuka yang berbasis Bitcoin.', + getOnZapstore: 'Dapatkan di Zapstore', + credits: 'Kredit', + creditPoweredBy: 'Didukung oleh', + creditNostr: 'Protokol terdesentralisasi', + creditCrewChat: 'Chat crew via', + creditCordn: 'Chat grup terenkripsi end-to-end', + creditEcash: 'Ecash via', + creditCashu: 'Ecash Chaumian untuk Lightning', + creditWalletConnect: 'Koneksi dompet via', + creditNwc: 'Nostr Wallet Connect (NIP-47)', + creditSigning: 'Penandatanganan di Android dengan', + creditAmber: 'Penandatangan Nostr untuk Android', + creditMapData: 'Data peta Bitcoin dari', + creditBtcmap: 'Tempat yang menerima Bitcoin', + creditCrowdfunding: 'Crowdfunding', + creditAngor: 'Crowdfunding Bitcoin terdesentralisasi', + creditDistributed: 'Didistribusikan di', + creditZapstore: 'Toko aplikasi sumber terbuka', + creditTrust: 'Kepercayaan & chat crew via', + creditContextvm: 'Skor kepercayaan Relatr & koordinasi chat crew terenkripsi', + stillQuestions: 'Masih punya pertanyaan?', + stillQuestionsDesc: 'Sasquatch adalah panduan AI kami — didukung data SkateSpots langsung. Tanyakan tentang spot, event, coach, gear, atau cara kerja apa pun.', + askSasquatch: 'Tanya The Sasquatch', + poweredBy: 'Didukung oleh', + decentralized: 'Terdesentralisasi', + communityOwned: 'Milik Komunitas', + }, + faq: { + seoTitle: 'FAQ - SkateSpots', + seoDescription: 'Tanyakan apa pun tentang SkateSpots kepada The Sasquatch.', + greeting: 'Hai! Saya The Sasquatch 🦧 — tanyakan apa pun tentang SkateSpots. Spot, event, gear, dompet, privasi, Nostr — saya siap. Apa yang ingin Anda ketahui?', + gotQuestions: 'Punya Pertanyaan?', + heroDesc: 'Tanyakan The Sasquatch — ia tahu segalanya tentang SkateSpots, Nostr, Bitcoin, dan skateboarding.', + askTitle: 'Tanya The Sasquatch', + askDesc: 'The Sasquatch terbuka di sudut kiri bawah layar Anda — cukup klik dan ketik pertanyaan Anda. Ia memiliki akses langsung ke spot, event, coach, dan cuaca.', + askQuestion: 'Apa yang dapat Anda bantu di SkateSpots?', + openSasquatch: 'Buka The Sasquatch', + commonQuestions: 'Pertanyaan umum — ketuk untuk bertanya', + quickAnswers: 'Jawaban cepat', + footerHint: 'The Sasquatch menggunakan data Nostr langsung dari relay SkateSpots + AI untuk menjawab pertanyaan Anda. 🛹', + chip1Label: 'Apa itu SkateSpots?', + chip1Q: 'Apa itu SkateSpots dan bagaimana cara kerjanya?', + chip2Label: 'Bagaimana cara menambah spot?', + chip2Q: 'Bagaimana cara menambahkan spot skate ke peta?', + chip3Label: 'Apa itu zap?', + chip3Q: 'Apa itu zap?', + chip4Label: 'Apakah gratis?', + chip4Q: 'Apakah SkateSpots gratis digunakan?', + chip5Label: 'Apa itu Stash Saya?', + chip5Q: 'Apa itu Stash Saya?', + chip6Label: 'Bagaimana cara login?', + chip6Q: 'Bagaimana cara masuk atau membuat akun?', + chip7Label: 'Apa itu Nostr?', + chip7Q: 'Apa itu Nostr?', + chip8Label: 'Privasi & Data', + chip8Q: 'Data apa yang publik dan apa yang privat di SkateSpots?', + chip9Label: 'Bagaimana menjual gear?', + chip9Q: 'Bagaimana cara menjual gear di SkateSpots?', + chip10Label: 'Apa itu The Lab?', + chip10Q: 'Apa itu The Lab?', + fact1Label: 'Spot skate di seluruh dunia', + fact1Value: 'Temukan & tambah', + fact2Label: 'Zap Bitcoin Lightning', + fact2Value: '100% gratis', + fact3Label: 'Terdesentralisasi di Nostr', + fact3Value: 'Anda memiliki data Anda', + fact4Label: 'Inventaris gear privat', + fact4Value: 'Stash terenkripsi', + s1Q: 'Apa itu SkateSpots?', + s1A: 'Peta dan komunitas terdesentralisasi untuk skateboarding, dibangun di Nostr. Temukan spot, temukan coach dan filmer, bergabung dengan crew, daftarkan event, dan beli/jual gear — tanpa perusahaan di tengahnya.', + s2Q: 'Bagaimana cara menambah spot?', + s2A: 'Ketuk peta, atau gunakan tombol + / "Tambah Spot", lalu letakkan pin dan isi detailnya. Anda memerlukan akun Nostr gratis (ketuk Masuk → Buat Akun — tanpa email).', + s3Q: 'Apa itu zap?', + s3A: 'Zap adalah tip Bitcoin Lightning. Anda dapat men-zap spot, event, crew, dan orang yang Anda hargai. Semuanya langsung ke penerima melalui Lightning — SkateSpots tidak pernah menyimpan dana Anda.', + s4Q: 'Apakah gratis?', + s4A: 'Ya. Membuat akun, menambah spot, dan menjelajah itu gratis. Ekstra berbayar opsional (seperti listing unggulan) dan tip (zap) dibayar langsung antar orang.', + s5Q: 'Data apa yang publik?', + s5A: 'Apa pun yang Anda terbitkan — spot, event, profil Anda — bersifat publik di relay Nostr. Pesan privat dan Stash Anda terenkripsi end-to-end. Lihat halaman Privasi untuk detail.', + s6Q: 'Apa itu The Lab?', + s6A: 'The Lab adalah tempat Anda menemukan orang untuk disewa atau belajar: coach, trainer, filmer, editor video, fotografer, builder, artis, dan lainnya.', + }, + privacy: { + seoTitle: 'Privasi — SkateSpots', + seoDescription: 'Bagaimana SkateSpots menangani data Anda: GPS Anda tetap di perangkat, spot yang Anda terbitkan bersifat publik, dan cara menyembunyikan IP dengan VPN atau Tor jika Anda mau.', + heroBefore: 'Anda', + heroHighlight: 'Privasi', + heroDesc: 'Tanpa pelacakan, tanpa iklan, tanpa penjualan data. Inilah tepatnya apa yang tetap di perangkat Anda, apa yang publik, dan cara mengunci lebih lanjut jika Anda mau.', + locationTitle: 'Lokasi Anda tetap di perangkat Anda', + locationBefore: 'Saat Anda mengetuk', + nearMe: '"Near Me,"', + locationAfter: 'lokasi GPS Anda dibaca di perangkat Anda dan hanya digunakan untuk memusatkan peta dan mengurutkan spot terdekat.', + locationGood1: 'Lokasi itu tidak pernah diterbitkan ke Nostr.', + locationGood2: 'Lokasi itu tidak pernah dikirim ke SkateSpots — tidak ada server SkateSpots yang mengumpulkannya.', + locationGood3: 'Lokasi itu tidak pernah dibagikan ke pihak ketiga mana pun.', + locationGood4: 'Di aplikasi native kami menggunakan sistem lokasi ponsel Anda langsung dan melewati Google Play Services — sehingga berfungsi di ponsel tanpa Google (GrapheneOS, /e/OS) dan Google tidak pernah melihatnya.', + weatherBefore: 'Cuaca nonaktif secara default. Saat Anda menyalakannya, ia mencari kondisi untuk', + weatherEm: 'spot', + weatherAfter: 'lokasi publik — bukan lokasi Anda.', + publicTitle: 'Apa yang publik secara desain', + publicDesc: 'SkateSpots adalah peta bersama, jadi sebagian hal memang dimaksudkan untuk dilihat semua orang. Saat Anda memilih menerbitkannya, ini bersifat publik di jaringan Nostr:', + public1Strong: 'Spot yang Anda tambahkan', + public1: '— termasuk koordinatnya. Jika Anda menambahkan spot di lokasi persis Anda, lokasi itu menjadi publik. Pikir dulu sebelum meletakkan pin di jalan masuk rumah Anda sendiri.', + public2Strong: 'Ulasan, komentar, dan profil publik Anda', + public2: '(nama, gambar).', + public3: 'Siapa yang Anda ikuti, dan reaksi publik.', + public4Strong: 'Zap', + public4: 'bersifat publik secara default: zap menautkan akun Anda — sering alamat Lightning Anda — ke pos yang Anda bayar dan ke tip itu sendiri. Dompet Anda dapat mengirimnya secara anonim jika Anda lebih suka tidak.', + publicNoteBefore: 'VPN atau Tor', + notWord: 'tidak', + publicNoteAfter: 'menyembunyikan konten yang Anda terbitkan — koordinat spot tetap publik. Alat privasi menyembunyikan identitas jaringan Anda (IP), bukan hal yang Anda pilih untuk diposting.', + encryptedTitle: 'Apa yang privat & terenkripsi', + enc1Strong: 'Pesan langsung', + enc1Mid: 'dan', + enc1Strong2: 'chat crew', + enc1: 'terenkripsi end-to-end (NIP-17). Hanya peserta yang dapat membacanya.', + enc2Strong: 'Stash Saya', + enc2: '— inventaris gear privat Anda — terenkripsi ke kunci Anda sendiri.', + enc3Strong: 'Anggota khusus crew', + enc3: 'dapat memilih untuk hanya terlihat oleh rekan crew mereka.', + ipTitle: 'Apa yang meninggalkan perangkat Anda: IP Anda', + ipBefore: 'Seperti setiap situs web, server yang dihubungi SkateSpots dapat melihat', + ipAddress: 'alamat IP', + ipAfter: 'Anda (indikator kasar wilayah Anda). Ini normal untuk aplikasi web atau peta mana pun dan bukan hal unik bagi kami. Server-server itu adalah:', + ipTileStrong: 'Tile peta', + ipTile: '(OpenStreetMap) — melihat IP Anda dan area peta mana yang Anda lihat.', + ipGeoStrong: 'Geocoding spot/shop', + ipGeo: '— saat Anda membuat atau mengedit spot atau shop, koordinatnya dikirim ke OpenStreetMap Nominatim untuk mengisi tag kota/negara. Saat Anda membuka Community Stats, koordinat pin yang tidak memiliki tag lokasi dikirim ke BigDataCloud agar dapat dikelompokkan berdasarkan wilayah (di-cache di perangkat Anda — paling banyak sekali per pin). Keduanya melihat IP Anda. Ini adalah pin yang Anda letakkan / koordinat pin publik, bukan GPS langsung perangkat Anda.', + ipPushStrong: 'Notifikasi latar belakang', + ipPush: '(opt-in) — jika Anda mengaktifkannya, server push SkateSpots melihat bahwa kunci Anda menerima sesuatu dan kapan (tidak pernah siapa pengirimnya atau apa isinya — pesan tetap terenkripsi), dan layanan push OS Anda (Google/Mozilla/Apple) mengantarkan peringatannya.', + ipBtcStrong: 'Tempat Bitcoin', + ipBtc: '(BTCMap, saat Anda menyalakan layer itu) — melihat IP Anda dan area yang Anda lihat.', + ipRelayStrong: 'Relay Nostr', + ipRelay: '— melihat IP Anda saat aplikasi membaca atau menerbitkan.', + ipMintStrong: 'Mint Cashu', + ipMint: '— melihat IP Anda setiap kali dompet Anda mengirim, menerima, atau melebur.', + ipRouteStrong: 'Petunjuk arah', + ipRoute: '(OSRM, dan Transitous untuk transit) — menerima titik awal dan akhir rute apa pun yang Anda minta, bukan hanya IP Anda. Perutean tetap di dalam aplikasi: titik awal dan tujuan Anda tidak pernah diserahkan ke Google atau Apple Maps.', + ipWeatherStrong: 'Cuaca', + ipWeatherMid: '(Open-Meteo, opt-in) dan', + ipUploadStrong: 'unggahan gambar', + ipWeather: '(Blossom), saat Anda menggunakannya.', + ipAiStrong: 'Sasquatch AI', + ipAi: '— pesan Anda dikirim ke server kami sendiri, lalu ke penyedia model.', + ipLink1: 'Karena Anda mengirim kunci publik (npub) pada koneksi yang sama, relay dapat menautkan IP Anda ke Anda — bukan hanya "seseorang terhubung", tetapi "orang ini, dari alamat ini".', + ipShieldBefore: 'Satu hal yang kami lindungi:', + ipMintsStrong: 'direktori mint', + ipShieldAfter: 'diambil melalui server kami, jadi MintRadar tidak pernah melihat IP Anda.', + vpnTitle: 'Ingin lebih privat? VPN atau Tor (opsional)', + vpnDesc: 'Bagi sebagian besar skater ini tidak perlu — tetapi jika Anda ingin menyembunyikan IP dan perkiraan lokasi dari server di atas, Anda punya dua opsi gratis:', + vpnReputable: '🛡️ VPN yang punya reputasi baik', + vpnReputableDesc: 'Menyembunyikan IP Anda di balik server VPN. Mudah dan cepat. Gunakan yang Anda bayar dan percayai; VPN gratis biasanya memonetisasi trafik Anda, jadi anggap "gratis" sebagai tanda bahaya.', + torBrowser: '🧅 Tor Browser', + torDesc: 'Gratis, privasi IP maksimal, dirutekan melalui beberapa relay. Lebih lambat — peta dan sebagian relay Nostr mungkin lag atau memblokir node keluar Tor. Bagus untuk yang ekstra hati-hati.', + readThis: 'Baca ini agar tidak tertipu', + caveat1Before: 'VPN/Tor menyembunyikan', + ipWord: 'IP', + caveat1: 'Anda — bukan spot yang Anda terbitkan. Pin di rumah Anda bersifat publik terlepas dari apakah Anda memakai VPN atau tidak.', + caveat2Before: 'Jangan aktifkan', + nearMeGps: '"Near Me" / GPS peramban', + caveat2: 'jika tujuan Anda tetap anonim — GPS presisi mengalahkan penyembunyian IP apa pun.', + caveat3: 'Tidak ada alat yang membuat Anda sepenuhnya "anonim." Ini mengurangi apa yang dapat disimpulkan server tentang lokasi jaringan Anda — itu saja.', + keysTitle: 'Kunci Anda, akun Anda', + keysBefore: 'Akun Anda adalah pasangan kunci kriptografis yang Anda miliki. Cara paling aman untuk masuk adalah', + signer: 'penandatangan', + keysAfter: '(Alby, nos2x, atau Amber di Android) agar kunci rahasia Anda tidak pernah ditempelkan ke aplikasi.', + keysCaveatBefore: 'Jika Anda menempelkan', + keysCaveatAfter: 'Anda langsung, kunci itu tersimpan di peramban Anda. Gunakan ekstensi penandatangan bila bisa, dan simpan cadangan nsec Anda di tempat aman offline.', + footerBefore: 'Pertanyaan? Tanyakan', + sasquatchName: 'The Sasquatch', + footerMid: 'di aplikasi, atau baca', + gettingStarted: 'panduan memulai', + about: 'Tentang', + }, + license: { + seoTitle: 'Lisensi - SkateSpots', + seoDescription: 'Lisensi SkateSpots. Anda bebas bermain skateboard.', + tagline: 'Skate, hasilkan, bersenang-senang, dan belanjakan Sats di mana pun Anda berada.', + copyright: 'Kontributor SkateSpots & komunitas', + licenseLabel: 'Lisensi', + freeLine1: 'ANDA BEBAS', + freeLine2: 'BERMAIN SKATEBOARD', + body: 'Proyek ini terbuka. Bagikan, fork, bangun di atasnya, skate. Jalanan milik semua orang. Kode ini juga. Terus skate, bersenang-senang, pelajari trik, dukung para pembangun dan terus skate lagi.', + builtBefore: 'Dibangun dengan ❤️ di', + builtMid: '· Didukung oleh', + lightning: 'Bitcoin Lightning ⚡', + viewSource: 'Lihat sumber', + aboutSkateSpots: 'Tentang SkateSpots', + supporters: 'Pendukung', + }, + glossary: { + seoTitle: 'Glosarium Trik · SkateSpots', + seoDescription: 'Glosarium skateboarding lengkap — {{count}} entri mencakup flip, grind, slide, grab, air, lip trick, handplant, freestyle, istilah transition, stance & hardware, dengan nama alternatif.', + heading: 'GLOSARIUM TRIK', + subheading: '{{count}} entri · trik, transition, freestyle, stance & hardware', + searchPlaceholder: 'Cari trik atau julukan — tre flip, crooks, method…', + clearSearch: 'Bersihkan pencarian', + all: 'Semua', + results: '{{count}} hasil{{s}} untuk', + noMatch: 'Tidak ada trik yang cocok. Coba julukan seperti “tre flip”, “crooks”, atau “melon”.', + tricksCount: '{{count}} trik', + footerBefore: 'Tahu trik atau julukan yang kami lewatkan? Trik mendapat nama berbeda di setiap scene — hubungi', + sasquatch: 'The Sasquatch 🦧', + footerAfter: 'dan beri tahu kami.', + }, + signers: { + seoTitle: 'Aplikasi Penandatangan - Amankan Kunci Nostr Anda | SkateSpots', + seoDescription: 'Pelajari aplikasi penandatangan yang menjaga kunci Nostr Anda aman. Temukan opsi terbaik untuk Android, iOS, atau peramban desktop.', + securityGuide: 'Panduan Keamanan', + protect: 'Lindungi', + nostrKeys: 'Kunci Nostr Anda', + heroDesc: 'Aplikasi penandatangan menjaga kunci privat Anda tetap aman dengan menandatangani event tanpa mengeksposnya. Alih-alih menempelkan kunci ke setiap aplikasi, biarkan penandatangan menanganinya dengan aman.', + whySignerStrong: 'Mengapa menggunakan penandatangan?', + whySigner: 'Kunci privat Nostr Anda seperti kata sandi yang tidak pernah dapat diubah. Aplikasi penandatangan menjaganya tetap aman sambil memungkinkan Anda memakai aplikasi Nostr apa pun.', + androidTitle: 'Penandatangan Android', + androidDesc: 'Aplikasi penandatangan native untuk perangkat Android, termasuk GrapheneOS.', + iosTitle: 'Penandatangan iOS', + iosDesc: 'Opsi penandatangan untuk pengguna iPhone dan iPad.', + browserTitle: 'Ekstensi Peramban', + browserDesc: 'Ekstensi peramban desktop untuk menandatangani di aplikasi web.', + recommended: 'Direkomendasikan', + yourPlatform: 'Platform Anda', + get: 'Dapatkan {{name}}', + protocolsTitle: 'Memahami Protokol', + nip07Desc: 'Standar ekstensi peramban. Ekstensi menyuntikkan kemampuan penandatanganan ke aplikasi web. Digunakan oleh Alby, nos2x, Flamingo, dan ekstensi serupa.', + nip46Desc: 'Protokol penandatanganan jarak jauh ("bunker"). Aplikasi penandatangan Anda menyetujui permintaan dari aplikasi lain tanpa membagikan kunci Anda. Digunakan oleh Nsec.app, Nostria, dan Nowser.', + nip55Desc: 'Protokol penandatangan khusus Android. Aplikasi native dapat meminta tanda tangan dari Amber tanpa mengekspos kunci. Pengalaman Android paling mulus.', + whichChoose: 'Mana yang dipilih?', + chooseAndroid: 'Android:', + chooseAndroidDesc: 'Amber (NIP-55) untuk aplikasi native', + chooseIos: 'iOS:', + chooseIosDesc: 'Nsec.app (NIP-46) untuk kompatibilitas terbaik', + chooseDesktop: 'Desktop:', + chooseDesktopDesc: 'Alby, nos2x, atau Flamingo (NIP-07)', + amberDesc: 'Penandatangan Android native yang berfokus pada keamanan dan kemudahan. Pilihan terbaik untuk pengguna Android.', + nsecAppDesc: 'Penandatangan jarak jauh lintas platform yang berfungsi sebagai brankas aman untuk kunci Anda.', + nostriaDesc: 'Aplikasi penandatangan jarak jauh dengan kunci tersimpan di penyimpanan perangkat yang aman.', + nowserDesc: 'Penandatangan multi-auth yang mendukung ekstensi peramban dan protokol penandatanganan jarak jauh.', + nsecAppIosDesc: 'Opsi terbaik untuk iOS. Gunakan sebagai penandatangan jarak jauh dengan klien Nostr apa pun.', + nowserTfDesc: 'Penandatangan iOS tersedia melalui TestFlight dengan kemampuan penandatanganan mirip Android.', + nostriaIosDesc: 'Penandatangan jarak jauh dengan penyimpanan kunci yang aman di perangkat Anda.', + nos2xDesc: 'Ekstensi peramban sederhana dan andal untuk menandatangani event Nostr.', + albyDesc: 'Dompet Bitcoin Lightning dengan manajemen kunci Nostr bawaan dan WebLN.', + flamingoDesc: 'Ekstensi peramban yang berfokus pada Nostr dengan antarmuka bersih.', + kiwiDesc: 'Di Android/GrapheneOS, gunakan Kiwi Browser untuk memuat ekstensi nos2x atau Alby.', + fNativeApp: 'Aplikasi native', + fMultiKey: 'Dukungan banyak kunci', + fEventSigning: 'Penandatanganan event', + fSecureStorage: 'Penyimpanan kunci aman', + fRemoteSigning: 'Penandatanganan jarak jauh', + fAnyClient: 'Bekerja dengan klien apa pun', + fCrossDevice: 'Sinkronisasi lintas perangkat', + fMultiKeySupport: 'Dukungan multi-kunci', + fNip07: 'Dukungan NIP-07', + fNip46: 'Dukungan NIP-46', + fFlexibleSigning: 'Penandatanganan fleksibel', + fNativeIos: 'Aplikasi iOS native', + fLightweight: 'Ringan', + fEasyToUse: 'Mudah digunakan', + fChromeSupport: 'Dukungan Chrome/Brave/Edge', + fLightningPayments: 'Pembayaran Lightning', + fNostrSigning: 'Penandatanganan Nostr', + fWebln: 'Dukungan WebLN', + fNwc: 'Dukungan NWC', + fCleanUi: 'UI bersih', + fPrivacyFocused: 'Berfokus privasi', + fExtensionMobile: 'Dukungan ekstensi di seluler', + fFullBrowser: 'Pengalaman peramban penuh', + fGraphene: 'Bekerja di GrapheneOS', + }, + betaDisclaimer: { + title: 'Perhatian — ini beta', + subtitle: 'Sedikit kata sebelum Anda mulai.', + ossTitle: 'Sumber terbuka & eksperimental', + ossBody: 'Dibangun secara terbuka oleh komunitas. Utek-utek, fork, rusak.', + betaTitle: 'Dalam beta — belum diaudit', + betaBody: 'Kode belum menjalani audit keamanan formal. Bug bisa terjadi.', + moneyTitle: 'Menangani Bitcoin & Lightning nyata', + moneyBody: 'Gunakan uang di dalamnya dengan risiko Anda sendiri. Hanya muat sebanyak yang Anda mampu kehilangan.', + finePrint: 'Tanpa jaminan dalam bentuk apa pun. Anda sepenuhnya bertanggung jawab atas dana dan kunci Anda sendiri.', + viewCode: 'Lihat kodenya', + accept: 'Mengerti, biarkan saya masuk', + }, + }, +}; export default idBatch3; diff --git a/src/i18n/id/batch4.ts b/src/i18n/id/batch4.ts index 0bcb324..0215384 100644 --- a/src/i18n/id/batch4.ts +++ b/src/i18n/id/batch4.ts @@ -1,4 +1,1121 @@ -/** id — batch 4. Filled by the translation pass; empty until then. */ -const idBatch4 = {}; +/** + * id — batch 4: walletUi namespace (wallet, Cashu, escrow, privacy, mints, + * QR, recovery, guide, zap, badges, trust, share, collections, newsletter, + * stats, leaderboard, supporters, admin, profile, index, stash). + * Skate vocabulary stays English (Stash, The Lab, Nostr, Lightning, Zap, Relay, + * sats, Cashu, mint, NWC, npub, Lightning Address); trick names stay English. + */ +const idBatch4 = { + walletUi: { + page: { + title: 'Dompet', + subtitle: 'Bitcoin Lightning + Cashu', + manage: 'Kelola', + getAWallet: 'Dapatkan Dompet', + learnPlanB: 'Pelajari lebih lanjut di Plan B Academy', + walletMinibits: 'Cashu seluler · NWC', + walletAlby: 'Ekstensi browser · WebLN + NWC', + walletZeus: 'Lightning kustodi mandiri', + walletCoinos: 'Berbasis web · berfungsi di mana saja', + whatAreZaps: 'Apa itu Zap?', + whatAreZapsShort: 'Apa itu zap?', + zapsDesc: 'Pembayaran Bitcoin Lightning instan. Kirim sats ke skater, pembuat spot, atau coach mana pun — tanpa perantara, tanpa potongan platform.', + instant: 'Instan', + instantDesc: 'Selesai dalam hitungan detik', + flexible: 'Fleksibel', + flexibleDesc: 'Dompetmu, kuncimu', + private: 'Privat', + privateDesc: 'Cashu menyembunyikan siapa yang membayar', + direct: 'Langsung', + directDesc: 'Nilai mengalir ke pembuat', + loginRequired: 'Perlu Masuk', + loginRequiredDesc: 'Masuk dengan akun Nostr-mu untuk menghubungkan dompet Lightning dan mulai melakukan zap.', + browseMints: 'Jelajahi mint Cashu', + }, + modal: { + walletName: 'Nama Dompet (opsional)', + walletNamePlaceholder: 'Dompet Lightning Saya', + connectionUri: 'URI Koneksi', + spendLimitTitle: 'Tetapkan batas pengeluaran dulu', + spendLimitBody1: 'String ini memungkinkan SkateSpots membayar invoice Lightning dari dompetmu. Di aplikasi dompetmu, beri koneksi ini', + dailyBudget: 'anggaran harian', + spendLimitBody2: '(misalnya beberapa ribu sats) yang kecil dan aktifkan hanya', + spendLimitBody3: 'Jangan pernah menempelkan koneksi dengan anggaran tak terbatas. Kamu bisa mencabutnya di dompetmu kapan saja.', + addWallet: 'Tambah Dompet', + nwcConnection: 'Koneksi NWC', + lightningWallet: 'Dompet Lightning', + pasteNwc: 'Tempel string koneksi NWC-mu untuk mengirim zap', + connectWallet: 'Hubungkan Dompet', + browserExtension: 'Ekstensi Browser (WebLN)', + autoDetected: 'Terdeteksi otomatis jika terpasang', + ready: 'Siap', + notFound: 'Tidak Ditemukan', + getNwcFrom: 'Dapatkan NWC dari:', + connectionRequired: 'URI Koneksi wajib diisi', + connectionRequiredDesc: 'Silakan masukkan URI koneksi NWC yang valid.', + activeChanged: 'Dompet aktif diubah', + activeChangedDesc: 'Dompet yang dipilih kini aktif untuk zap.', + connectNwc: 'Hubungkan Dompet NWC', + connectNwcDesc: 'Masukkan string koneksi dari dompet yang kompatibel.', + connect: 'Hubungkan', + connecting: 'Menghubungkan...', + walletSettings: 'Pengaturan Dompet', + connectDesc: 'Hubungkan dompet Lightning-mu untuk mengirim zap secara instan.', + }, + cashu: { + title: 'Dompet Cashu', + desc: 'Dompet ecash bawaan — tanpa penyiapan eksternal', + initializing: 'Menginisialisasi dompet...', + walletError: 'Kesalahan Dompet', + balance: 'Saldo', + balanceAria: 'Saldo dompet {{amount}} sats', + activeMint: 'Mint Aktif', + selectMint: 'Pilih mint', + receive: 'Terima', + send: 'Kirim', + receiveViaLightning: '⚡ Terima via Lightning', + amountSats: 'Jumlah dalam sats', + generateInvoice: 'Buat Invoice', + generating: 'Membuat…', + or: 'Atau', + receiveCashu: '🥜 Terima Token Cashu', + scanQr: 'Pindai QR', + pasteCashu: 'Tempel token Cashu (cashu...)', + receiveToken: 'Terima Token', + receiving: 'Menerima…', + createCashu: '🥜 Buat Token Cashu', + createToken: 'Buat Token', + creating: 'Membuat…', + payInvoice: '⚡ Bayar Invoice Lightning', + pasteInvoice: 'Tempel invoice Lightning (lnbc...)', + payInvoiceBtn: 'Bayar Invoice', + processing: 'Memproses...', + payAddress: '📧 Bayar Lightning Address', + sendToAddress: 'Kirim ke Alamat', + sending: 'Mengirim…', + recentActivity: 'Aktivitas Terbaru', + receivedLightning: 'Menerima ⚡ Lightning', + sentLightning: 'Mengirim ⚡ Lightning', + sentToken: 'Mengirim 🥜 Token', + receivedToken: 'Menerima 🥜 Token', + whatIsCashu: 'Apa itu Cashu?', + whatIsCashuDesc: 'Cashu adalah uang digital yang didukung Bitcoin Lightning. Anggap saja sebagai token Bitcoin yang kamu pegang di browser.', + benefitOffline: 'Berfungsi offline di spot skate', + benefitInstant: 'Pembayaran peer-to-peer instan', + benefitPrivacy: 'Fokus privasi (mint tidak bisa melacakmu)', + benefitRedeemable: 'Selalu bisa ditukar dengan sats Lightning', + findMints: 'Temukan mint di mintradar.pedani.eu', + backupTitle: 'Cadangkan Dompetmu', + backupDesc: 'Dompetmu diamankan dengan frasa pemulihan 12 kata. Simpan dengan aman — kamu memerlukannya untuk memulihkan saldo jika menghapus data browser.', + viewRecovery: 'Lihat Frasa Pemulihan', + backupNote: 'Ini seperti nsec Nostr-mu — jaga kerahasiaannya dan cadangkan!', + tokenReceived: 'Token diterima', + tokenReceivedDesc: 'Token Cashu berhasil ditukar!', + receiveFailed: 'Gagal menerima', + unknownError: 'Kesalahan tidak diketahui', + requestUnsupported: 'Permintaan Cashu belum didukung', + requestUnsupportedDesc: 'Dompet ini belum bisa membayar permintaan Cashu (creq) — mintalah invoice atau alamat Lightning sebagai gantinya.', + onchainUnsupported: 'On-chain tidak didukung di sini', + onchainUnsupportedDesc: 'Itu alamat Bitcoin. Dompet ini hanya mengirim token Cashu dan pembayaran Lightning.', + nostrProfile: 'Itu profil Nostr', + nostrProfileDesc: 'Pindai token Cashu, invoice Lightning, atau alamat Lightning untuk membayar.', + clinkUnsupported: 'Kode pembayaran belum didukung', + clinkUnsupportedDesc: 'Dompet ini belum bisa membayar kode CLINK. Gunakan invoice atau alamat Lightning sebagai gantinya.', + unrecognizedQr: 'Kode QR tidak dikenali', + unrecognizedQrDesc: 'Pindai token Cashu, invoice Lightning, atau alamat Lightning.', + invalidAmount: 'Jumlah tidak valid', + invalidAmountDesc: 'Silakan masukkan jumlah yang valid', + paymentSent: 'Pembayaran terkirim', + paymentSentDesc: 'Mengirim {{amount}} sats ke {{address}}', + paymentFailed: 'Pembayaran gagal', + copied: 'Disalin', + copiedDesc: '{{label}} disalin ke papan klip', + receiveSats: 'Terima {{amount}} sats', + payInvoiceHint: 'Bayar invoice ini dari dompet Lightning mana pun', + invoiceQrAlt: 'Kode QR Invoice', + lightningInvoice: 'Invoice Lightning', + invoiceLabel: 'Invoice', + waiting: '⏳ Menunggu pembayaran...', + tokenReady: 'Token Siap Dikirim', + shareToken: 'Bagikan token ini dengan penerima', + tokenQrAlt: 'Kode QR Token', + cashuToken: 'Token Cashu', + tokenLabel: 'Token', + copyToken: 'Salin Token', + tokenWarning: 'Siapa pun yang memiliki token ini bisa mengklaimnya - perlakukan seperti uang tunai!', + browser: { + title: 'Dompet Ecash Bawaan', + appOnly: 'Hanya di aplikasi', + desc: 'Ecash Cashu kustodi mandiri, didukung Bitcoin Lightning', + unlockTitle: 'Buka dompet lengkap di aplikasi SkateSpots', + unlockDesc: 'Dompet ecash bawaan memungkinkanmu mencetak, mengirim, dan menukar token Cashu langsung di spot. Ia berada di aplikasi native, tempatnya bisa berkomunikasi langsung dengan mint — browser membatasi koneksi tersebut demi keamananmu.', + zapTipTitle: 'Zap & tip — langsung berfungsi di browser-mu sekarang', + zapTipDesc: 'Mengirim sats ke spot, event, coach, dan crew berfungsi di sini. Cukup hubungkan dompet Lightning di bawah — Nostr Wallet Connect atau ekstensi browser seperti Alby. Tanpa perlu mint Cashu.', + }, + }, + escrow: { + title: 'Escrow', + desc: 'Jual dengan aman: aktifkan escrow dan pembeli bisa mengunci sats-nya untukmu dalam sebuah transaksi. Kamu melepaskannya saat menyerahkan barang — jika tidak, pembeli bisa mengambilnya kembali setelah waktu yang disepakati.', + active: 'Escrow aktif', + publish: 'Aktifkan escrow', + published: 'Escrow aktif', + publishedDesc: 'Pembeli kini bisa mengunci dana untukmu dalam sebuah transaksi.', + failed: 'Tidak bisa mengaktifkan escrow', + }, + escrowSettings: { + title: 'Pengaturan escrow', + desc: 'Default untuk transaksi escrow Cashu. Khusus perangkat ini.', + lockWindow: 'Jendela penguncian default', + lockWindowHint: 'Berapa lama dana tetap terkunci sebelum pembeli bisa mengambilnya kembali. Lebih lama lebih aman bagi penjual.', + days: 'hari', + preferredMint: 'Mint untuk escrow', + activeMint: 'Mint aktif', + preferredMintHint: 'Mint mana yang mendanai escrow. Gunakan yang tepercaya.', + requireListings: 'Wajibkan escrow pada listing baru', + requireListingsHint: 'Memilih otomatis "Wajibkan escrow" saat kamu mendaftarkan barang.', + }, + privacy: { + title: 'Tips Privasi', + subtitle: 'Pelajari cara melindungi privasi finansialmu', + cashuRecommended: 'CASHU (Disarankan)', + anon: 'Transaksi anonim', + blind: 'Tanda tangan buta menyembunyikan aktivitas', + noIp: 'Tanpa paparan IP', + trustMint: 'Percayakan dana pada mint', + lightningAddress: 'LIGHTNING ADDRESS', + linked: 'Bisa dikaitkan dengan identitas', + traceable: 'Riwayat pembayaran bisa dilacak', + ipVisible: 'IP terlihat saat membuat invoice', + selfCustody: 'Kustodi mandiri dimungkinkan', + bestPractices: 'Praktik Terbaik', + tip1Title: 'Gunakan Cashu untuk menerima tip', + tip1Desc: 'Dompet Cashu bawaan adalah cara paling privat untuk menerima zap', + tip2Title: 'Gunakan dompet terpisah untuk SkateSpots', + tip2Desc: 'Jangan gunakan dompet tabungan utamamu - pisahkan dana aplikasi', + tip3Title: 'Pertimbangkan menggunakan VPN atau Tor', + tip3Desc: 'Menyembunyikan alamat IP-mu saat bertransaksi', + tip4Title: 'Hindari Lightning address yang terkait identitas', + tip4Desc: 'Gunakan alamat samaran yang tidak terikat nama aslimu', + proTip: 'Kiat pro:', + proTipDesc: 'Terima pembayaran ke dompet Cashu-mu dulu, lalu secara berkala pindahkan jumlah lebih besar ke dompet pribadimu menggunakan VPN untuk transfernya.', + warnTitle: 'Catatan Privasi', + warnDesc: 'Lightning address berpotensi mengaitkan aktivitas SkateSpots-mu dengan identitas aslimu.', + betterPrivacy: 'Untuk privasi lebih baik:', + bullet1: 'Gunakan dompet khusus untuk aplikasi ini', + bullet2: 'Pertimbangkan menggunakan dompet Cashu sebagai gantinya', + bullet3: 'Gunakan VPN/Tor untuk transaksi', + useCashu: 'Gunakan Cashu Saja', + understand: 'Saya Mengerti', + }, + mintPrivacy: { + title: 'Privasi Mint', + desc: 'Menggunakan beberapa mint meningkatkan privasi dengan mencegah satu mint melihat semua transaksimu', + distribution: 'Distribusi Dana', + singleWarning: 'Menggunakan satu mint berarti mint itu bisa melihat semua waktu dan jumlah transaksimu. Pertimbangkan menambah lebih banyak mint untuk privasi lebih baik.', + yourMints: 'Mint-mu ({{count}})', + default: 'Default', + addMint: 'Tambah Mint', + addMintDesc: 'Tambahkan mint Cashu baru ke dompetmu', + mintUrl: 'URL Mint', + add: 'Tambah', + adding: 'Menambahkan...', + orChoose: 'Atau pilih dari daftar', + recommended: 'Mint yang Disarankan', + allMints: 'Semua mint (direktori)', + searchMints: 'Cari mint…', + noDirectoryMints: 'Tidak ada mint yang cocok dengan pencarianmu.', + directoryHint: 'Dari direktori komunitas MintRadar — tidak resmi dan mungkin sudah usang.', + added: 'Ditambahkan', + soon: 'Segera', + autoDistribute: 'Distribusi dana otomatis', + autoDesc: 'Sebarkan dana yang diterima ke beberapa mint', + autoAria: 'Distribusi dana otomatis (segera hadir)', + tip1: 'Gunakan minimal 2-3 mint berbeda untuk privasi lebih baik', + tip2: 'Jangan simpan semua dana di satu mint - sebarkan', + tip3: 'Pertimbangkan yurisdiksi mint (negara berbeda = akses hukum berbeda)', + tip4: 'Mint melihat waktu transaksi tetapi BUKAN siapa yang kamu bayar (tanda tangan buta)', + future: 'Fitur mendatang: Rotasi mint dan skor privasi - nantikan!', + findMore: 'Temukan lebih banyak mint di mintradar.pedani.eu', + trustWarning: 'Peringatan Kepercayaan:', + trustWarningDesc: 'Mint bersifat kustodial - mereka memegang danamu. Hanya gunakan mint yang kamu percayai. Jika mint menghilang, danamu bisa hilang. Menyebarkan dana ke beberapa mint mengurangi risiko.', + removeTitle: 'Hapus Mint?', + removeDesc: 'Yakin ingin menghapus {{name}}?', + removeMint: 'Hapus Mint', + warning: 'Peringatan:', + withdrawWarning: 'Mint ini memiliki {{amount}} sats. Tarik danamu sebelum menghapus!', + invalidUrl: 'URL tidak valid', + invalidUrlDesc: 'URL mint harus diawali https://', + mintAdded: 'Mint Ditambahkan', + mintAddedDesc: 'Mint baru berhasil ditambahkan', + mintAddedNamed: '{{name}} berhasil ditambahkan', + failedAdd: 'Gagal menambahkan mint', + failed: 'Gagal', + noMints: 'Tidak Ada Mint', + singleMint: 'Mint Tunggal', + concentrated: 'Terkonsentrasi', + moderate: 'Sedang', + wellDistributed: 'Terdistribusi Baik', + mintCoinosWebDesc: 'Mint ramah web (disarankan untuk browser)', + mintMinibitsWebDesc: '⚠ Hanya aplikasi native — tidak terjangkau dari browser web', + mintMinibitsNativeDesc: 'Mint SkateSpots — disarankan', + mintCoinosDesc: 'Mint ramah web', + mintLnbitsDesc: 'Mint komunitas di LNbits', + }, + nwc: { + title: 'Dompet Lightning', + noConnection: 'Dompet NWC', + refresh: 'Segarkan saldo', + createInvoice: 'Buat invoice', + copyInvoice: 'Salin invoice', + pasteInvoice: 'Tempel invoice Lightning (lnbc…)', + amount: 'Jumlah: {{amount}} sats', + pasteToSee: 'Tempel invoice untuk melihat jumlahnya', + pay: 'Bayar', + invoiceQrAlt: 'Kode QR invoice Lightning', + enterAmount: 'Masukkan jumlah dalam sats', + readBalanceFailed: 'Tidak bisa membaca saldo', + readBalanceFailedDesc: 'Dompetmu tidak merespons.', + createInvoiceFailed: 'Tidak bisa membuat invoice', + createInvoiceFailedDesc: 'Coba lagi sebentar lagi.', + paymentSent: 'Pembayaran terkirim', + paidAmount: 'Membayar {{amount}} sats.', + paid: 'Terbayar.', + paymentRejected: 'Dompet menolak pembayaran.', + }, + qr: { + title: 'Pindai Kode QR', + desc: 'Posisikan kode QR di dalam tampilan kamera untuk memindai', + paste: 'Tempel dari Papan Klip', + hint: 'Pindai token Cashu, invoice Lightning, atau alamat Lightning', + clipboardEmpty: 'Papan klip kosong', + clipboardEmptyDesc: 'Tidak ada teks di papan klip', + pasteFailed: 'Gagal menempel', + pasteFailedDesc: 'Tidak bisa membaca dari papan klip', + }, + recovery: { + title: 'Frasa Pemulihan', + desc: '12 kata ini adalah satu-satunya cara memulihkan saldo ecash-mu. Tulis secara berurutan dan simpan offline — jangan pernah membagikannya kepada siapa pun.', + tapReveal: 'Ketuk untuk mengungkap', + noWatching: 'Pastikan tidak ada yang mengintip', + hide: 'Sembunyikan', + reveal: 'Ungkap', + paperHint: 'Menulisnya di kertas paling aman — menyalin ke papan klip bisa bocor ke aplikasi lain.', + written: 'Saya sudah menuliskannya', + revealFirst: 'Ungkap kata-katanya dulu', + copiedDesc: 'Frasa pemulihan disalin — tempel di tempat aman, lalu kosongkan papan klipmu.', + copyFailed: 'Gagal menyalin', + copyFailedDesc: 'Silakan tulis kata-katanya sebagai gantinya.', + }, + guide: { + quickGuide: 'Panduan Singkat', + fullGuide: 'Panduan Dompet (Edisi Skater)', + cashuSummary: 'Privasi + Kepraktisan', + mintHoldsFunds: '(mint memegang dana)', + lightningSummary: 'Kendali + Keamanan', + youHoldKeys: '(kamu memegang kunci)', + useBoth: 'Gunakan keduanya: Cashu untuk tip, Lightning untuk tabungan', + cashuTitle: 'DOMPET CASHU', + cashuTagline: 'Seperti uang tunai di kantongmu di skatepark', + cashuBullet1: 'Cepat dikeluarkan untuk tip', + cashuBullet2: 'Jangan bawa tabungan hidupmu ke sini', + cashuBullet3: 'Jika mint menghilang, dana bisa hilang', + cashuBullet4: 'Tidak ada yang tahu berapa isinya (privasi!)', + cashuPerfectFor: 'Camilan sesi, zap klip, tip kecil', + lightningTitle: 'DOMPET LIGHTNING', + lightningTagline: 'Seperti rekening bankmu - kamu yang memegang kendali', + lightningBullet1: 'Aman, kamu mengendalikan kuncinya', + lightningBullet2: 'Butuh waktu sebentar untuk menyiapkan', + lightningBullet3: 'Riwayat transaksi lengkap', + lightningBullet4: 'Lebih baik untuk jumlah besar', + lightningPerfectFor: 'Beli gear, tabungan, zap besar', + perfectFor: 'Sempurna untuk:', + proTips: 'KIAT PRO', + tip1Title: 'Gunakan kedua dompet', + tip1Desc: 'Simpan uang sesi di Cashu, tabungan di Lightning', + tip2Title: 'Coba berbagai dompet', + tip2Desc: 'Bereksperimenlah untuk menemukan yang cocok. Masing-masing punya fitur dan trade-off berbeda', + tip3Title: 'Privasi lebih baik', + tip3Desc: 'Menggunakan beberapa dompet berarti tidak ada satu aplikasi yang melihat semua aktivitasmu', + tip4Title: 'Dapatkan pengalaman', + tip4Desc: 'Semakin banyak alat yang kamu tahu, semakin banyak pilihan. Mulai kecil, belajar sambil jalan', + tldr: 'TL;DR:', + tldrDesc: 'Tidak ada dompet "terbaik" - semuanya tergantung kebutuhanmu. Coba keduanya, gunakan yang terasa pas, dan jangan simpan semua sats-mu di satu tempat!', + }, + zap: { + count: '{{count}} zap', + connectFirst: 'Hubungkan Dompetmu Dulu', + connectFirstDesc: 'Untuk mengirim zap (tip Bitcoin), kamu perlu menghubungkan dompet Lightning.', + quickSetup: 'Penyiapan Cepat (30 detik)', + quickSetupDesc: 'Hubungkan dompet Lightning yang sudah kamu punya dengan Nostr Wallet Connect (NWC). Tanpa akun tambahan.', + connectNwc: 'Hubungkan Dompet dengan NWC', + noWallet: 'Belum punya dompet? Pelajari caranya', + skip: 'Lewati dulu (invoice manual)', + note: 'ℹ️ Catatan:', + noteDesc: 'Kamu tetap bisa membuat invoice tanpa menghubungkan dompet, tetapi kamu harus menyalinnya secara manual untuk membayar.', + payWithWebln: 'Bayar dengan WebLN', + processing: 'Memproses...', + openInWallet: 'Buka di Dompet Lightning', + scanHint: 'Pindai kode QR atau salin invoice untuk membayar dengan dompet Lightning mana pun.', + cashuInstant: 'Bayar instan dengan dompet bawaanmu', + satsAvailable: 'sats tersedia', + or: 'ATAU', + customAmount: 'Jumlah khusus', + addComment: 'Tambah komentar (opsional)', + insufficientBanner: '⚠️ Saldo Cashu tidak cukup. Kamu butuh {{amount}} sats lagi. Beralih ke Lightning atau isi ulang dompet Cashu-mu.', + creatingInvoice: 'Membuat invoice...', + zapAmount: 'Zap {{amount}} sats', + zapAmountCashu: 'Zap {{amount}} sats dengan Cashu', + lightningInvoice: 'Invoice Lightning', + qrAlt: 'Kode QR Invoice Lightning', + enterAmount: 'Masukkan jumlah', + enterAmountDesc: 'Pilih preset atau ketik jumlah sats yang valid.', + cashuUnavailable: 'Dompet Cashu tidak tersedia', + cashuUnavailableDesc: 'Dompet Cashu-mu belum siap. Beralih ke Lightning atau buka dompetmu dulu.', + insufficientCashu: 'Saldo Cashu tidak cukup', + insufficientCashuDesc: 'Kamu butuh {{amount}} sats lagi. Beralih ke Lightning atau isi ulang.', + zapSentCashu: 'Zap terkirim! 🥜', + zapSentCashuDesc: 'Mengirim zap {{amount}} sats dari dompet Cashu-mu.', + cashuFailed: 'Pembayaran Cashu gagal', + cashuFailedDesc: 'Gagal membayar dengan dompet Cashu-mu.', + invoiceCopied: 'Invoice disalin', + invoiceCopiedDesc: 'Invoice Lightning disalin ke papan klip', + defaultComment: 'Zap di SkateSpots! 🛹', + titleConnect: 'Hubungkan Dompet', + titlePayment: 'Pembayaran Lightning', + titleZap: 'Kirim Zap', + descConnect: 'Hubungkan dompet Lightning-mu untuk mengirim zap', + descPayment: 'Bayar dengan Bitcoin Lightning Network', + descZap: 'Zap adalah pembayaran Bitcoin kecil yang mendukung pembuat item ini. Jika kamu menikmatinya, pertimbangkan mengirim zap!', + descZapShort: 'Zap adalah pembayaran Bitcoin kecil yang mendukung pembuat. Pertimbangkan mengirim zap!', + }, + zapCrew: { + title: 'Zap Crew', + desc: 'Bagi zap secara merata ke {{count}} anggota crew yang punya Lightning address.', + noMembers: 'Tidak ada anggota crew lain untuk di-zap saat ini.', + totalAmount: 'Jumlah total', + customTotal: 'Total khusus', + each: 'sats per orang', + rounded: '(dibulatkan)', + noWallet: 'Tidak ada dompet terhubung — kamu akan mendapat invoice per anggota untuk dibayar manual. Hubungkan dompet untuk pembagian sekali ketuk.', + zapAcross: 'Zap {{amount}} sats ke {{count}}', + sentTo: '⚡ Terkirim ke {{done}}/{{total}}', + none: 'Tidak ada pembayaran otomatis yang selesai', + copyPending: 'Salin invoice yang tertunda untuk menyelesaikan pembayaran secara manual.', + thanks: 'Terima kasih telah mendukung crew!', + payingCrew: 'Membayar crew…', + defaultComment: 'Zap crew {{crew}}! 🤘', + sent: 'Terkirim', + paying: 'Membayar', + resolving: 'Menyelesaikan', + skipped: 'Dilewati', + failed: 'Gagal', + waiting: 'Menunggu', + copyInvoice: 'Salin invoice', + invoiceCopied: 'Invoice disalin', + invoiceCopiedDesc: 'Tempel ke dompet Lightning mana pun', + }, + zapBadges: { + title: 'Lencana Zap', + zaps: 'zap', + satsSent: 'sats terkirim', + rank: 'peringkat', + footnote: 'Berdasarkan 30 hari terakhir zap.', + first: 'Zap Pertama', + firstHint: 'Kirim zap pertamamu', + regular: 'Rutin', + regularHint: 'Kirim 10 zap', + generous: 'Dermawan', + generousHint: 'Kirim 10.000 sats', + patron: 'Patron', + patronHint: 'Kirim 100.000 sats', + top10: '10 Besar', + top10Hint: 'Capai 10 pendukung teratas', + }, + trust: { + unavailable: 'Skor kepercayaan tidak tersedia', + yourContent: 'Ini kontenmu', + following: 'Kamu mengikuti pengguna ini', + friendOfFriend: 'Teman dari teman (2 tingkat)', + nip05: 'Pengguna terverifikasi NIP-05', + unknown: 'Pengguna tidak dikenal', + help: 'Skor kepercayaan membantu mengidentifikasi kontributor yang andal di komunitas skateboard.', + }, + share: { + title: 'Bagikan profil', + desc: 'Arahkan kamera ponsel ke kode untuk membuka profil {{name}}.', + qrAlt: 'Kode QR profil', + copyLink: 'Salin tautan', + copyFailed: 'Gagal menyalin', + copyFailedDesc: 'Tidak bisa menyalin tautan.', + shareEllipsis: 'Bagikan…', + }, + addToCollection: { + title: 'Simpan ke Koleksi', + desc: 'Simpan "{{spot}}" ke salah satu koleksimu', + loginRequired: 'Silakan masuk untuk menyimpan spot ke koleksi', + noCollections: 'Kamu belum punya koleksi', + createFirst: 'Buat yang pertama di bawah!', + spotCount: '{{count}} spot', + alreadySavedTag: 'Sudah disimpan', + alreadySaved: 'Sudah disimpan', + alreadySavedDesc: '"{{spot}}" sudah ada di "{{collection}}"', + saved: 'Spot disimpan!', + savedDesc: 'Menambahkan "{{spot}}" ke "{{collection}}"', + saveFailed: 'Gagal menyimpan', + somethingWrong: 'Terjadi kesalahan', + created: 'Koleksi dibuat!', + createdDesc: 'Menambahkan "{{spot}}" ke koleksi barumu "{{collection}}"', + createFailed: 'Gagal membuat koleksi', + name: 'Nama Koleksi', + descriptionOptional: 'Deskripsi (opsional)', + creating: 'Membuat...', + createAndSave: 'Buat & Simpan', + createNew: 'Buat Koleksi Baru', + }, + collection: { + back: 'Kembali ke Koleksi', + created: 'Dibuat {{date}}', + deleteTitle: 'Hapus Koleksi?', + deleteDesc: 'Ini akan menghapus "{{title}}" secara permanen. Spot-nya sendiri tidak akan terpengaruh.', + deleting: 'Menghapus...', + deleteFailed: 'Gagal menghapus koleksi', + deleted: 'Koleksi dihapus', + deletedDesc: '"{{title}}" telah dihapus', + empty: 'Tidak ada spot di koleksi ini', + emptyOwner: 'Tambahkan spot ke koleksimu dengan mengeklik "Simpan ke Koleksi" pada spot mana pun', + emptyOther: 'Koleksi ini kosong', + browseSpots: 'Jelajahi Spot', + linkCopied: 'Tautan disalin!', + linkCopiedDesc: 'Tautan koleksi telah disalin ke papan klip', + map: 'Peta Koleksi', + removeFailed: 'Gagal menghapus spot', + shareText: 'Lihat koleksi spot ini: {{title}}', + spotRemoved: 'Spot dihapus', + spotRemovedDesc: '"{{title}}" telah dihapus dari koleksi ini', + }, + mints: { + title: 'Mint', + subtitle: 'Jelajahi mint Cashu dan kesehatannya. Operasi dompet Cashu berjalan di aplikasi SkateSpots.', + searchPlaceholder: 'Cari mint berdasarkan nama atau URL…', + onlineOnly: 'Hanya online', + count: '{{filtered}} dari {{total}} mint', + directoryError: 'Tidak bisa memuat direktori mint.', + directoryHint: 'Direktori ini dijalankan komunitas dan dibatasi lajunya — mungkin sementara tidak tersedia.', + goToWallet: 'Buka Dompet', + appOnly: 'Menambahkan mint dilakukan di aplikasi SkateSpots (Cashu hanya di aplikasi).', + noMatch: 'Tidak ada mint yang cocok dengan "{{query}}".', + footer: 'Data kesehatan dari proyek komunitas MintRadar — tidak resmi dan mungkin usang. Selalu tinjau ketentuan mint sebelum memercayakannya dengan dana.', + archived: 'Diarsipkan', + degraded: 'Menurun', + offline: 'Offline', + online: 'Online', + terms: 'Ketentuan', + reliability: 'keandalan', + add: 'Tambah', + addToWallet: 'Tambah ke dompet', + copyUrl: 'Salin URL', + openMint: 'Buka mint', + inWallet: 'Di dompetmu', + addedBadge: 'Ditambahkan', + urlCopied: 'URL mint disalin', + added: 'Mint ditambahkan', + addedDesc: '{{host}} kini ada di dompetmu.', + couldNotAdd: 'Tidak bisa menambahkan mint', + communityRating: 'Penilaian komunitas', + reliabilityLabel: 'Keandalan', + uptime: 'Waktu aktif 24j / 7h', + location: 'Lokasi', + latency: 'Latensi', + nuts: 'NUT yang didukung', + units: 'Unit', + version: 'Versi', + ratedBy: 'Dinilai {{rating}}/5 oleh {{count}} orang di MintRadar.', + noRating: 'Belum ada penilaian komunitas di MintRadar.', + reviewsNote1: 'Ulasan tertulis bukan bagian dari direktori —', + openMintRadar: 'buka MintRadar', + reviewsNote2: 'untuk membaca atau menulisnya.', + liveness: 'Audit keaktifan: {{mints}} mint dan {{melts}} melt diuji', + livenessErrors: ' · {{errors}}/{{total}} kesalahan terbaru', + whatsAMint: 'Apa itu mint?', + whatsAMintDesc: 'Mint Cashu menerbitkan dan menukar ecash di dompetmu. Ia memegang Bitcoin yang menjamin tokenmu — jadi mint yang tidak kamu jalankan sendiri adalah mint yang harus kamu percayai.', + mintWarning: 'Mint bisa offline, mengubah ketentuan, atau menghilang bersama dana. Simpan hanya saldo kecil kecuali kamu memercayai operatornya.', + healthDisclaimer: 'Data kesehatan dijalankan komunitas (MintRadar) — tidak resmi dan mungkin usang.', + }, + appShop: { + title: 'App Shop', + subtitle: 'Merch SkateSpots untuk orang-orang yang menjaga scene tetap berjalan.', + comingSoon: 'Segera hadir', + wearThe: 'Kenakan', + scene: 'Scene', + heroDesc1: 'Merch untuk orang-orang yang menjaga ini tetap berjalan — dijual', + locally: 'secara lokal, atas permintaan', + heroDesc2: '. Kamu kirim pesan, kami atur detailnya, dan kamu bayar dengan', + heroDesc3: '— Lightning atau Cashu — saat mengambilnya. Tanpa kartu, tanpa akun, tanpa robot checkout, tanpa perantara yang memotong hasil.', + requestItem: 'Minta barang', + dmHint: 'Membuka DM terenkripsi yang privat dengan saya.', + lightning: 'Lightning', + cashu: 'Cashu', + localHandover: 'Serah terima lokal', + inTheWorks: 'Sedang digarap', + notForSale: 'belum dijual', + soon: 'segera', + tees: 'Kaos & hoodie', + decks: 'Deck', + shopTools: 'Alat shop', + stickerPacks: 'Paket stiker', + stickerPacksDesc: 'Paketnya segera hadir. Desainnya tidak — cetak dua ini sekarang, gratis.', + sticker: 'Stiker', + stickerTip: 'Cetak potong hitam. Cetak di kertas stiker, potong sepanjang tepi hitam.', + poster: 'Poster', + posterTip: 'Cetak di A3; perkecil ke A4 (50%) dan tetap terbaca dengan baik.', + printableAlt: 'SkateSpots {{title}} — bisa dicetak', + print: 'Cetak', + printNote1: 'Cetak pada', + actualSize: '100% / "Ukuran sebenarnya"', + printNote2: 'agar ukurannya tepat dan QR tetap tajam — ini mengarah ke skate-spots.org. File vektor, jadi bisa diperbesar tanpa pecah.', + howBuying: 'Cara membeli', + dmNotCart: 'ini DM, bukan keranjang', + step1Title: 'Kirim pesan ke saya', + step1Desc: 'Kirim DM berisi apa yang kamu mau — barang, ukuran, warna, apa pun.', + step2Title: 'Kami atur semuanya', + step2Desc: 'Harga dalam sats, serta di mana dan kapan bertemu. Ini percakapan, bukan checkout.', + step3Title: 'Bayar dengan sats', + step3Desc: 'Lightning atau Cashu saat serah terima, lalu barang jadi milikmu. Tanpa pengiriman, tanpa ruang tunggu.', + }, + newsletter: { + newIssue: 'Edisi baru', + composerTitle: 'Terbitkan edisi newsletter', + composerDesc: 'Diterbitkan sebagai artikel NIP-23 (kind 30023) di relay komunitas. Pelanggan menerimanya di lonceng notifikasi mereka. Isi mendukung Markdown.', + fieldTitle: 'Judul', + identifier: 'Identifier (slug)', + leaveBlank: 'biarkan kosong untuk dibuat otomatis', + reusingSlug: 'Menggunakan kembali slug yang ada akan mengedit edisi itu alih-alih membuat yang baru.', + summary: 'Ringkasan', + optional: 'opsional', + coverImage: 'URL gambar sampul', + bodyMarkdown: 'Isi (Markdown)', + characters: '{{count}} karakter', + publishIssue: 'Terbitkan edisi', + issuePublished: 'Edisi diterbitkan! 🛹', + issuePublishedDesc: 'Pelanggan akan melihatnya di lonceng notifikasi mereka.', + publishFailed: 'Gagal menerbitkan', + couldNotReachRelay: 'Tidak bisa menjangkau relay mana pun — periksa koneksimu dan coba lagi.', + tryAgain: 'Silakan coba lagi.', + publishedToNostr: 'Diterbitkan ke Nostr', + publishedToast: 'Diterbitkan!', + postedToNostr: 'Drop {{number}} dikirim ke Nostr.', + postToNostr: 'Kirim ke Nostr', + previewLabel: 'Pratinjau', + editFirst: 'Edit dulu', + previewNoteDesc: 'Beginilah catatan akan tampil di sebagian besar klien Nostr. Pemformatan berbeda-beda per klien.', + editNoteDesc: 'Edit teks catatan di bawah. Perubahan hanya memengaruhi penerbitan ini — file sumber tetap tidak berubah.', + dropNumber: 'Drop {{number}}', + publish: 'Terbitkan', + publishing: 'Menerbitkan...', + dropIsOut: 'Drop {{number}} sudah keluar', + daysAgo: '{{count}}h lalu', + dismiss: 'Tutup', + itsMonday: 'Ini Hari Senin', + mondayDesc: 'Waktunya merilis newsletter mingguan. Satu klik dan AI menulisnya dari git log.', + writeDrop: 'Tulis Drop {{number}}', + dismissReminder: 'Tutup pengingat', + loginPrompt: 'Masuk dengan Nostr untuk mendapatkan drop baru di kotak masukmu.', + subscribedToast: 'Kamu berlangganan! 🛹', + subscribedToastDesc: 'Drop baru akan masuk ke lonceng notifikasi di bawah "Berita".', + unsubscribed: 'Berhenti berlangganan', + unsubscribedDesc: 'Kamu tetap bisa membaca setiap edisi di sini kapan saja.', + checking: 'Memeriksa…', + subscribed: 'Berlangganan', + unsubscribe: 'Berhenti berlangganan', + subscribeCta: 'Berlangganan newsletter', + archiveSynced: 'Arsip disinkronkan ke Nostr', + missingCount: '{{count}} edisi arsip belum ada di Nostr', + backfillDesc: 'Terbitkan {{list}} sebagai artikel NIP-23 agar pelanggan dan pembaca long-form bisa melihat arsip lengkapnya. Halamannya tetap mempertahankan tata letak kayanya.', + backfill: 'Isi {{count}} ke Nostr', + publishing2: 'Menerbitkan…', + publishingLabel: 'Menerbitkan…', + backfilled: 'Mengisi {{count}} edisi 🛹', + backfilledDesc: 'Arsip kini tersimpan di Nostr untuk pelanggan dan pembaca.', + partialBackfill: 'Menerbitkan {{published}}, {{failed}} gagal', + retryFinish: 'Coba lagi untuk menyelesaikan: {{list}}.', + notLoggedIn: 'Belum masuk', + allIssues: 'Semua edisi', + brand: 'Newsletter SkateSpots', + digTheDrop: 'Suka drop-nya? Zap dan jangan lewatkan yang berikutnya.', + sectionStats: 'Komunitas dalam Angka', + sectionWhatsNew: 'Yang Baru', + sectionSpotOfWeek: 'Spot Minggu Ini', + sectionCommunity: 'Komunitas', + sectionSupport: 'Dukung Proyek', + sectionLatestDrops: 'Drop Terbaru · Langsung dari Nostr', + mappedBy: 'Dipetakan oleh', + viewOnMap: 'Lihat di peta', + noSpotPicked: 'Belum ada spot yang dipilih minggu ini. Kirim milikmu dan mungkin masuk drop berikutnya.', + browseMap: 'Jelajahi peta', + spotMap: 'Peta Spot', + statsBadge: 'Statistik', + supportDesc: '100% sumber terbuka, didanai komunitas, tanpa iklan, tanpa investor. Jika bermanfaat, zap atau dukung di Angor.', + readFull: 'Baca edisi lengkap', + joinSkaters: 'Bergabung dengan {{count}} skater yang menerima drop', + weeklyDrops: 'Drop Mingguan', + tagline: 'Newsletter mingguan · dirilis kapan pun kita mau', + freeNote: 'Gratis. Ditenagai Nostr — langgananmu tersimpan pada kuncimu dan mengikuti di semua perangkat. Drop baru masuk ke lonceng notifikasimu.', + live: 'Live', + builtOn: 'Dibangun di atas', + openSource: 'Sumber terbuka', + supportUs: 'Dukung kami', + freeToSkate: 'Kamu bebas bermain skateboard', + }, + stats: { + subtitle: 'Metrik langsung yang ditarik langsung dari jaringan Nostr. Transparan, terdesentralisasi, dapat diverifikasi siapa saja.', + dataSource: 'Sumber data:', + updated: 'diperbarui {{age}}', + refresh: 'Segarkan', + partial: 'Tidak bisa menjangkau setiap relay — angka ini mungkin tidak lengkap.', + error: 'Tidak bisa menjangkau relay saat ini. Statistik akan dimuat setelah koneksi pulih.', + atAGlance: 'Komunitas Sekilas', + skateSpots: 'Skate Spot', + listedShops: 'Shop Terdaftar', + events: 'Event', + mappers: 'Mapper', + uniqueContributors: 'kontributor unik', + labHeader: 'The Lab · Kreator & Layanan', + total: '{{count}} total', + coaches: 'Coach', + filmers: 'Filmer', + editors: 'Editor', + photographers: 'Fotografer', + builders: 'Pembangun', + artists: 'Seniman', + graffiti: 'Grafiti', + tattoo: 'Tato', + trainers: 'Pelatih', + musicians: 'Musisi', + judges: 'Juri', + organizers: 'Penyelenggara', + barbers: 'Tukang Cukur', + showFewer: 'Tampilkan lebih sedikit', + showAllCrafts: 'Tampilkan semua 13 keahlian', + community: 'Komunitas', + tours: 'Tour', + crews: 'Crew', + marketplace: 'Marketplace', + liveListings: 'Listing Aktif', + tradesRecorded: 'Transaksi Tercatat', + satsTraded: 'Sats Ditransaksikan', + zapsToMappers: 'Zap ke Mapper', + tradesNote1: 'transaksi timbal balik di antara', + tradesNote2: 'orang. Sats dilaporkan sendiri oleh para pedagang — aplikasi tidak bisa mengamati pembayaran di luar aplikasi — jadi angka utama hanya menghitung', + mutual: 'timbal balik', + tradesNote3: 'transaksi dengan batas per pasangan; klaim mentahnya adalah', + tradesNote4: 'sats. "Zap ke mapper" hanya menghitung tanda terima yang ditujukan ke kontributor teratas kami — ini', + not: 'bukan', + tradesNote5: 'volume zap global.', + byRegion: 'Spot & Shop per Wilayah', + resolving: 'Menyelesaikan {{count}} lokasi tanpa tag dari koordinatnya… sekali saja, lalu di-cache di perangkat ini.', + topCountries: 'Negara Teratas', + topCities: 'Kota Teratas', + other: 'Lainnya', + otherCountriesTitle: 'Negara di luar 6 teratas', + otherCitiesTitle: 'Kota di luar 6 teratas', + uncategorised: 'Tanpa Kategori', + uncategorisedTitle: 'Tanpa tag kota/negara', + regionNote1: 'Menghitung', + spotsAndShops: 'spot & shop', + regionNote2: ', bukan skater — dari tag kota/negara masing-masing, atau diturunkan dari koordinat pin-nya saat tidak ada (di-cache di perangkatmu; negara dikelompokkan berdasarkan kode ISO jika ada), hanya relay komunitas, dengan konten yang disembunyikan moderasi dikecualikan.', + ofTotal: '{{count}} dari {{total}}', + regionNote3: 'lokasi tidak punya tag lokasi dan tampil sebagai "Tanpa Kategori".', + growth: 'Pertumbuhan Seiring Waktu', + chartCumulativeTitle: 'Spot Dipetakan (Kumulatif)', + chartCumulativeDesc: 'Total spot yang ditambahkan ke peta seiring waktu', + chartMonthlyTitle: 'Aktivitas Bulanan', + chartMonthlyDesc: 'Konten baru yang diterbitkan setiap bulan', + chartMappersTitle: 'Mapper Aktif / Bulan', + chartMappersDesc: 'Kontributor unik yang menerbitkan setiap bulan', + chartMixTitle: 'Campuran Konten', + chartMixDesc: 'Rincian berdasarkan jenis konten (sepanjang waktu)', + noData: 'Belum ada data', + topMappers: 'Mapper Teratas', + mostSpots: '— spot terbanyak ditambahkan', + noMapperData: 'Belum ada data mapper', + topShops: 'Shop Teratas', + mostShops: '— shop terbanyak ditambahkan', + shopCount: '{{count}} shop', + noShopData: 'Belum ada data shop', + supporters: 'Pendukung Komunitas', + fundedTitle: 'Didanai oleh Komunitas', + fundedDesc1: 'Crowdfunding Bitcoin terdesentralisasi via Angor.', + fundedDesc2: 'Tanpa iklan, tanpa investor, tanpa menjual data.', + backAngor: 'Dukung kami di Angor', + communityLink: 'Komunitas →', + footer1: 'Semua data ditarik langsung dari', + footer2: '— relay Nostr publik.', + footer3: 'Setiap event ditandatangani oleh pembuatnya dan dapat diverifikasi secara kriptografis.', + footer4: 'Tidak ada angka yang bisa dipalsukan.', + spots: 'Spot', + shops: 'Shop', + lab: 'Lab', + thisMonth: '+{{count}} bulan ini', + fromActive: '{{count}} dari akun aktif', + viewAll: 'Lihat semua', + spotCount: '{{count}} spot', + }, + leaderboard: { + mapEarn: 'Petakan & Dapatkan', + helpMap: 'BANTU PETAKAN DUNIA', + intro: 'Tambahkan spot dan shop, dapat zap dari skater yang berterima kasih. Kontributor teratas mungkin mendapat hadiah bonus!', + howItWorks: 'Cara Kerjanya', + step1Title: '1. Petakan', + step1Desc: 'Tambahkan spot & shop dengan foto dan detail', + step2Title: '2. Dapatkan Zap', + step2Desc: 'Skater yang merasa spot-mu berguna akan memberi tip', + step3Title: '3. Hadiah Bonus', + step3Desc: 'Mapper teratas mungkin mendapat hadiah bonus dari dana kami', + proTips: '💡 Kiat Pro untuk Lebih Banyak Zap:', + tipPhotos: 'Tambahkan 3+ foto', + tipDescriptions: 'Tulis deskripsi terperinci', + tipLocation: 'Lokasi akurat', + mapShop: 'Petakan Shop', + mapShopDesc: 'Skate shop, toko papan', + mapSpot: 'Petakan Spot', + mapSpotDesc: 'Taman, spot jalanan, DIY', + shops: 'Shop', + spotsLower: 'spot', + shopsLower: 'shop', + contributions: 'kontribusi', + yourRanking: 'Peringkatmu', + spotsShops: '{{spots}} spot • {{shops}} shop', + totalLower: 'total', + overall: 'Keseluruhan', + noContributions: 'Belum ada kontribusi. Jadilah yang pertama!', + addFirstSpot: 'Tambahkan Spot Pertama', + noShops: 'Belum ada shop yang dipetakan', + addFirstShop: 'Tambahkan Shop Pertama', + noSpots: 'Belum ada spot yang dipetakan', + poweredBy: 'Ditenagai Zap Komunitas', + poweredByDesc: 'Saat kamu merasa sebuah spot berguna, zap mapper-nya! Itu cara terbaik berterima kasih dan mendorong lebih banyak kontribusi.', + you: 'Kamu', + zapTitle: 'Papan Peringkat Zap', + zapSubtitle: 'Spot yang paling banyak dicintai — dan skater yang memberikannya.', + thisWeek: 'Minggu ini', + thisMonth: 'Bulan ini', + allTime: 'Sepanjang waktu', + topZappedSpots: 'Spot paling banyak di-zap', + noZaps: 'Belum ada zap di periode ini. Jadilah yang pertama — tekan ⚡ di spot yang kamu suka.', + topSupporters: 'Pendukung teratas', + noZapsSent: 'Belum ada zap yang dikirim di periode ini.', + fromTop10: '⚡ {{amount}} sats dari 10 teratas', + supporter: 'Pendukung', + skateShop: 'Skate shop', + skateSpot: 'Skate spot', + }, + supporters: { + our: 'KOMUNITAS', + community: 'KAMI', + heroDesc: 'SkateSpots dibangun oleh dan untuk komunitas. Pendukung, kolaborator, mitra, dan teman yang menjaganya tetap gratis dan terdesentralisasi.', + backAngor: 'Dukung kami di Angor', + backers: 'Pendukung', + backersDesc: 'Skater yang mendukung SkateSpots — pendanaan on-chain via Angor, dan zap Lightning ke proyek.', + sourceAngor: 'Angor', + supportersTotals: '{{count}} pendukung · {{angor}} sats via Angor · {{zap}} sats di-zap', + quietNote: 'Ditambah semua yang memberi secara diam-diam — terima kasih. ❤️', + silentTitle: 'On-chain privat (silent payment)', + silentDesc: 'Satu nama, alamat segar untuk setiap pembayaran — on-chain via silent payment, atau Lightning dari catatan yang sama. Tidak ada yang digunakan ulang, tidak ada yang dikaitkan.', + silentCopyName: 'Salin nama', + silentCopied: 'Disalin', + silentWallets: 'Butuh dompet yang mendukung payment name / silent payment: Sparrow, Cake, Dana, Phoenix, BlueWallet, Wasabi, Nunchuk, atau BitBox02.', + wayLightningTitle: 'Instan & publik', + wayLightningDesc: 'Zap SkateSpots, atau bayar dengan tenang. Berfungsi saat belum masuk.', + waySilentTitle: 'On-chain privat', + waySilentDesc: 'Nama silent-payment — alamat baru untuk setiap pembayaran.', + wayAngorTitle: 'Danai pembangunannya', + wayAngorDesc: 'Angor — rilis bertahap, dapat dikembalikan di atas 100k sats.', + donateTitle: 'Dukung SkateSpots', + donateDesc: 'Tiga jalur, tiga alasan — pilih yang cocok untukmu. Setiap sat menjaga peta tetap gratis, tanpa iklan, dan sumber terbuka.', + donatePageLink: 'Buka halaman donasi sederhana', + updatedAt: 'Diperbarui {{when}}', + tiersNote: 'Tingkatan: Supporter di bawah 100k sats · Patron 100k–1M · Legend 1M+', + tierEmpty: 'Belum ada siapa pun — jadilah yang pertama.', + joinSupporters: 'Bergabung dengan {{count}} pendukung', + showAll: 'Tampilkan semua {{count}}', + showLess: 'Tampilkan lebih sedikit', + impactSeeStats: 'Lihat gambaran lengkapnya →', + impactAsOf: 'langsung dari relay komunitas', + anonymousBacker: 'Pendukung anonim', + beFirstBacker: 'Belum ada pendukung publik — jadilah yang pertama.', + backersTotal: '{{count}} pendukung · {{amount}} sats terkumpul', + verifiedOnChain: 'Terverifikasi on-chain', + supportedBy: 'Didukung oleh {{count}}', + tierSupporter: 'Supporter', + tierPatron: 'Patron', + tierLegend: 'Legend', + topZappers: 'Yang Zap SkateSpots', + topZappersDesc: 'Skater yang mengirim zap publik langsung ke proyek. Pembayaran senyap tidak didaftarkan.', + paysFor: 'Untuk apa dukunganmu', + paysForDesc: 'Ke mana setiap sat pergi — tanpa gaji, tanpa kantor, tanpa iklan.', + payRelay: 'Hosting relay', + payDomain: 'Domain & TLS', + payAi: 'Node AI / ContextVM', + payDev: 'Waktu pengembangan', + payOps: 'Operasional', + payMarketing: 'Pemasaran', + payRelayDesc: 'Menjaga peta tetap online dan tangguh.', + payDomainDesc: 'Nama, sertifikat, koneksi aman.', + payAiDesc: 'Sasquatch, pemandu komunitas.', + payDevDesc: 'Membangun dan memperbaiki SkateSpots.', + payOpsDesc: 'Pekerjaan tak glamor yang menjaganya tetap berjalan.', + payMarketingDesc: 'Menjangkau scene lokal baru dan skate shop.', + impact: 'Dampak sejauh ini', + impactDesc: 'Apa yang telah dibangun komunitas — didanai oleh skater.', + impactSpots: 'Spot', + impactCrews: 'Crew', + impactEvents: 'Event', + impactLab: 'Pro Lab', + impactShops: 'Shop', + impactMappers: 'Mapper', + support: 'Dukungan', + supportDesc: 'Danai SkateSpots di Angor — crowdfunding Bitcoin on-chain yang terdesentralisasi. Tanpa perantara, tanpa KYC.', + collaborators: 'Kolaborator', + collaboratorsDesc: 'Orang-orang yang aktif membangun SkateSpots — developer, desainer, operator relay.', + partners: 'Mitra', + partnersDesc: 'Organisasi dan proyek yang bekerja sama erat dengan kami.', + friends: 'Teman', + friendsDesc: 'Orang-orang yang sefrekuensi dengan kami.', + backTitle: 'Dukung proyek di Angor', + backDesc: 'Angor adalah pendanaan Bitcoin on-chain terdesentralisasi yang dibangun di atas Nostr — danamu tetap dalam kendalimu, dirilis bertahap, tanpa kustodian yang memegang dananya. Kontribusi hingga 100.000 sats berfungsi seperti donasi (tanpa handshake pemulihan); jumlah lebih besar adalah investasi yang dana tak terpakainya bisa dipulihkan. Setiap sat digunakan untuk pengembangan, hosting relay, dan menjaga SkateSpots gratis bagi setiap skater di bumi.', + donateNote: 'Lebih suka donasi langsung? ⚡ Zap di bawah — tidak ada yang perlu dikembalikan, tidak ada yang perlu dipulihkan.', + openAngor: 'Buka Angor', + orZap: 'atau ⚡ zap spot, crew, atau kreator mana pun langsung di aplikasi', + wantCollaborate: 'Ingin berkolaborasi?', + wantCollaborateDesc: 'Developer, desainer, skater dengan keahlian — hubungi kami.', + viewNostrHub: 'Lihat di NostrHub', + wantPartner: 'Ingin bermitra dengan SkateSpots? Hubungi kami di Nostr.', + comingSoon: 'Segera hadir', + wantListed: 'Ingin terdaftar di sini?', + wantListedDesc: 'Kirim logo (PNG/WebP, latar transparan, min 200×200px) dan URL-mu via DM di Nostr, hanya jika kamu punya vibe-nya.', + whyTitle1: 'Mengapa Kami Butuh', + whyTitle2: 'Dukungan', + whyDesc: 'SkateSpots 100% gratis, sumber terbuka, dan dibangun di atas Nostr — protokol terdesentralisasi tanpa server pusat yang bisa mematikannya. Tanpa iklan, tanpa menjual data, tanpa investor. Setiap sat langsung menuju pengembangan, hosting relay, dan menjaga ini gratis bagi setiap skater di bumi.', + why1Title: 'Berbasis Nostr', + why1Desc: 'Tanpa server pusat. Datamu hidup di relay yang kamu pilih.', + why2Title: 'Ditenagai Bitcoin', + why2Desc: 'Dapat sats dengan memetakan spot. Belanjakan di shop lokal.', + why3Title: 'Gratis selamanya', + why3Desc: 'Sumber terbuka, tanpa paywall, tanpa pelacakan, tanpa pendanaan VC.', + thankYou: 'Terima kasih. Setiap sat menjaga spot tetap di peta. 🛹⚡', + license: 'Lisensi', + faq: 'FAQ', + }, + admin: { + confirmed: 'Terkonfirmasi', + title: 'Antrean tinjauan', + subtitle: 'Spot, shop, event, tour, dan gear yang memicu sinyal sampah. Sembunyikan dan Konfirmasi adalah label lunak yang dapat dibalik; laporan diurutkan lebih dulu. Tidak ada yang dihapus.', + tabReports: 'Laporan', + tabSpots: 'Spot', + tabShops: 'Shop', + tabEvents: 'Event', + tabTours: 'Tour', + tabGear: 'Gear', + tabCrews: 'Crew', + tabLab: 'Lab', + tabClaims: 'Klaim', + nothingToReview: 'Tidak ada yang perlu ditinjau — tidak ada hal semacam ini yang memicu sinyal sampah.', + hideActioned: 'Sembunyikan yang ditindak', + showActioned: 'Tampilkan yang ditindak ({{count}})', + undoAll: 'Batalkan semua {{count}}', + undoAllTitle: 'Batalkan setiap putusan di tab ini?', + undoAllDesc: 'Ini mengembalikan setiap item ke netral — tidak disembunyikan, tidak divalidasi. Ini menerbitkan satu label publik per item, jadi dengan Amber kamu akan mendapat {{count}} layar persetujuan.', + undoCount: 'Batalkan {{count}}', + undo: 'Batalkan', + confirm: 'Konfirmasi', + hide: 'Sembunyikan', + hideIt: 'Sembunyikan', + hideForEveryone: 'Sembunyikan ini untuk semua orang?', + hideForEveryoneDesc: 'Ini menghapus item dari jelajah dan pencarian untuk setiap pengguna SkateSpots. Ini label publik yang dapat dibalik — kamu bisa Batalkan dari antrean ini.', + hidden: 'Disembunyikan', + hiddenDesc: 'Dihapus dari aplikasi via label publik. Dapat dibalik.', + couldNotHide: 'Tidak bisa menyembunyikan', + notASpot: 'Bukan spot skate', + lookAtIt: 'Lihat', + }, + profile: { + nip05Verified: 'Terverifikasi NIP-05', + nip05NotVerified: 'NIP-05 tidak terverifikasi terhadap kunci ini', + message: 'Pesan', + zapsReceived: 'zap diterima', + memberSince: 'Anggota sejak', + badges: 'Lencana', + sponsorsSupport: 'Sponsor & dukungan', + skater: 'Skater', + stance: 'Stance', + skating: 'Skating', + homeSpot: 'Home spot', + basedIn: 'Berbasis di', + addSkateDetails: 'Tambahkan detail skate-mu', + addSkateDetailsDesc: 'Atur stance, gaya & levelmu untuk muncul di direktori Skater.', + spotsAdded: 'Spot Ditambahkan', + shopsAdded: 'Shop Ditambahkan', + noSpots: 'Kamu belum menambahkan spot apa pun', + noSpotsDesc: 'Taruh spot lokalmu di peta →', + stash: 'Stash', + gear: 'Gear', + crews: 'Crew', + info: 'Info', + lightning: 'Lightning', + silentPayment: 'Silent Payment', + coordinator: 'Koordinator', + coordinatorAdded: 'Koordinator ditambahkan', + add: 'Tambah', + messagePrivately: 'Kirim pesan privat', + founder: 'Pendiri', + member: 'Anggota', + supportSkater: 'Dukung skater ini', + supportSkaterDesc: 'Kirim tip sebagai terima kasih atas kontribusinya', + }, + index: { + joinCommunity: 'Bergabung dengan komunitas untuk menambah spot, membuat event & lainnya', + topZapped: 'PALING BANYAK DI-ZAP', + topZappedDesc: 'Spot paling banyak didukung bulan ini', + leaderboard: 'Papan Peringkat', + newHere: 'BARU DI SINI?', + newHereDesc: 'Buat akun gratis untuk menambah spot, ikut event, terhubung dengan skater, dan menjadi bagian komunitas. Tanpa email.', + followFounder: 'Ikuti Pendiri', + followFounderDesc: 'Tahan avatar selama 3 detik untuk mengikuti dan tetap mendapat kabar fitur serta event baru!', + createAccount: 'Buat Akun', + accountWorks: 'Akunmu berfungsi di semua aplikasi dalam jaringan', + footerTagline: 'Sumber Terbuka • Milik Komunitas • Tanpa Iklan', + }, + stash: { + title: 'Stash Saya', + loginDesc: 'Inventaris gear privatmu. Lacak apa yang kamu miliki, tetapkan harga, dan bagikan secara selektif dengan pedagang.', + encrypted: 'Terenkripsi', + syncsEverywhere: 'Sinkron di Mana Saja', + p2pTrading: 'Perdagangan P2P', + encryptionRequired: 'Enkripsi Diperlukan', + encryptionRequiredDesc: 'Stash-mu dienkripsi demi privasi. Gunakan penandatangan yang mendukung enkripsi NIP-44 (seperti Alby, nos2x, atau Amber).', + learnSigners: 'Pelajari Tentang Penandatangan', + select: 'Pilih', + stash: 'Stash', + wishlist: 'Wishlist', + allCategories: 'Semua kategori', + sortNewest: 'Terbaru', + sortValue: 'Nilai', + sortCondition: 'Kondisi', + sortAz: 'A–Z', + friendsOnly: 'Hanya teman', + addToWishlist: 'Tambah ke Wishlist', + addItemToStash: 'Tambah Item ke Stash', + addItem: 'Tambah Item', + editItem: 'Edit Item', + publicStash: 'Stash publik', + listView: 'Tampilan daftar', + gridView: 'Tampilan kisi', + uploading: 'Mengunggah...', + addPhotos: 'Tambah Foto', + wishlistReqPlaceholder: 'Persyaratan khusus apa pun...', + itemDescPlaceholder: 'Jelaskan barangnya, kerusakan apa pun...', + itemsCount: '{{count}} item', + wishlistEmpty: 'Wishlist Kosong', + wishlistEmptyDesc: 'Tambahkan gear yang kamu cari — kami akan mencocokkanmu dengan stash teman.', + stashEmpty: 'Stash-mu Kosong', + stashEmptyDesc: 'Mulai lacak gear-mu. Deck, truck, sepatu — tambahkan sekali, akses di mana saja via Nostr.', + noMatch: 'Tidak ada item yang cocok', + noMatchDesc: 'Coba sesuaikan filtermu.', + backupTransfer: 'Cadangan & transfer', + backupDesc: 'Stash-mu dienkripsi di Nostr. Simpan salinan yang kamu kendalikan — relay mati atau akun baru tidak bisa menghilangkan daftar gear-mu.', + exportTitle: 'Cadangan terenkripsi', + exportDialogDesc: 'Simpan {{count}} item ke file. Enkripsikan agar file yang bocor tidak menjadi kebocoran.', + modePassword: 'Kata sandi', + modeKey: 'Kunciku', + password: 'Kata sandi', + confirmPassword: 'Konfirmasi kata sandi', + passwordHint: 'Gunakan minimal 8 karakter. Tidak ada pemulihan — jangan lupakan.', + keyModeHint: 'Dienkripsi dengan kunci Nostr-mu. Hanya kunci itu yang bisa membukanya — tidak ada yang perlu diingat.', + exportPlaintext: 'Ekspor tanpa enkripsi', + pwTooShort: 'Gunakan minimal 8 karakter.', + pwMismatch: 'Kata sandi tidak cocok.', + exportFailed: 'Tidak bisa membuat cadangan.', + unlockTitle: 'Buka kunci cadangan', + unlockDesc: 'Cadangan ini dilindungi kata sandi.', + unlock: 'Buka kunci', + unlockFailed: 'Tidak bisa membuka kunci cadangan.', + show: 'Tampilkan', + hide: 'Sembunyikan', + strength: 'Kekuatan kata sandi', + strengthWeak: 'Lemah', + strengthFair: 'Cukup', + strengthGood: 'Baik', + strengthStrong: 'Kuat', + filenameWillSave: 'Akan disimpan sebagai {{name}}', + export: 'Ekspor', + import: 'Impor', + exported: 'Stash diekspor', + exportedDesc: '{{count}} item disimpan ke file.', + noItemsInFile: 'Tidak ada item yang ditemukan di file itu.', + noValidItems: 'Tidak ada item valid yang ditemukan di file itu.', + imported: 'Mengimpor {{count}} item', + importSkipped: '{{count}} dilewati (sudah ada di stash-mu).', + importAdded: 'Ditambahkan ke stash-mu.', + importFailed: 'Impor gagal', + couldNotRead: 'Tidak bisa membaca file itu.', + updateFailed: 'Tidak bisa memperbarui stash-mu', + updatedCount: 'Memperbarui {{count}} item', + markedForSale: 'Menandai {{count}} untuk dijual', + unmarkedCount: 'Membatalkan tanda {{count}}', + removedCount: 'Menghapus {{count}} item', + selectedCount: '{{count}} dipilih', + selectAll: 'Pilih semua', + visibilityPublic: 'Publik', + visibilityPrivate: 'Privat', + forSale: 'Dijual', + remove: 'Hapus', + bulkDeleteTitle: 'Hapus {{count}} item?', + bulkDeleteDesc: 'Ini menulis ulang stash terenkripsimu dalam satu tanda tangan dan tidak bisa dibatalkan di sini. Ekspor cadangan dulu jika ragu.', + deleteTitle: 'Hapus dari stash-mu?', + deleteDesc: '"{{title}}" akan dihapus dari stash-mu', + deleteDescPublic: ' dan dihapus dari etalase publikmu', + deleteUndone: '. Ini tidak bisa dibatalkan.', + deleteDescGeneric: 'Item ini akan dihapus dari stash-mu. Ini tidak bisa dibatalkan.', + listOnMarketplace: 'Daftarkan di Marketplace', + noPriceSet: 'Harga belum ditetapkan', + categoryLabel: 'Kategori', + photosLabel: 'Foto', + willingToSell: 'Bersedia Menjual', + willingToTrade: 'Bersedia Menukar', + whereIsThisItem: 'Di mana item ini?', + visibilityLabel: 'Visibilitas', + visibilityPrivateOnlyYou: 'Privat - Hanya kamu', + visibilityFriendsMutual: 'Teman - Saling mengikuti', + visibilityPublicAnyone: 'Publik - Siapa saja', + visibilityFriends: 'Teman', + brandLabel: 'Merek', + sizeLabel: 'Ukuran', + descriptionLabel: 'Deskripsi', + conditionLabel: 'Kondisi', + itemName: 'Nama Item', + saveChanges: 'Simpan Perubahan', + listItemDialogTitle: 'Daftarkan "{{title}}"', + pickUpWhere: 'Di mana pembeli bisa mengambil item ini?', + linkToSpot: 'Tautkan ke Skate Spot', + linkToSpotDesc: 'Terbaik untuk penjualan lokal • Muncul di halaman spot & peta', + recommended: 'Disarankan', + noSpecificSpot: 'Tanpa Spot Tertentu', + noSpecificSpotDesc: 'Terlihat hanya di halaman Marketplace', + tipLinkedSpots: '💡 Kiat: Listing yang ditautkan ke spot lebih mudah ditemukan skater lokal.', + anyoneCanSee: 'Siapa pun bisa melihatnya di profilmu.', + seeWhatOthersSee: 'Lihat apa yang orang lain lihat', + inventory: 'Inventaris', + publicWantsNote: 'Keinginan publik diposting ke Marketplace sebagai iklan "dicari", agar penjual bisa menemukanmu.', + howItWorks: 'Cara kerjanya', + tapToMarketplace: 'Ketuk untuk ke Marketplace →', + viewWishlist: 'Lihat Wishlist', + tipEditItems: 'Edit item dengan tombol pena', + tipListForSale: 'Daftarkan untuk dijual dengan tombol toko', + tipAddPhotos: 'Tambahkan foto untuk tawaran tukar yang lebih baik', + tipKeySyncs: 'Kunci Nostr tersinkron ke semua perangkat', + itemsReadyToSell: '{{count}} item siap dijual', + }, + }, +}; export default idBatch4; diff --git a/src/i18n/id/batch5.ts b/src/i18n/id/batch5.ts index b12b677..e1db5d7 100644 --- a/src/i18n/id/batch5.ts +++ b/src/i18n/id/batch5.ts @@ -1,4 +1,1604 @@ -/** id — batch 5. Filled by the translation pass; empty until then. */ -const idBatch5 = {}; +/** + * Bahasa Indonesia — batch 5: direktori layanan The Lab (labUi) + sosial + * (socialUi): chat crew, DM, kolektif, koordinator, dan vouch. + * + * Nama protokol & merek (The Lab, Coach, Filmer, Photographer, Editor, Builder, + * Crew, Spot, Stash, Nostr, Lightning, Zap, sats, DM, NWC, NIP-05) tetap + * Inggris; nama trick tetap Inggris. Placeholder ({{...}}) dipertahankan. + */ +const idBatch5 = { + labUi: { + activeCount: '{{count}} aktif', + addMusicProfile: 'Tambah Profil Musik', + all: 'Semua', + clearAll: 'Hapus semua', + collective: 'Kolektif', + filters: 'Filter', + following: 'Mengikuti', + getRiderCard: 'Dapatkan Kartu Rider', + judgeEvents: 'Juri Event', + justASkater: 'Hanya', + labForServices: 'The Lab untuk layanan. Jelajahi & ikuti seluruh komunitas skater', + loginToOffer: 'Masuk untuk menawarkan layanan', + newest: 'Terbaru', + noResults: 'Tidak ada hasil', + offer: 'Tawarkan', + offerBuilding: 'Tawarkan Pembuatan', + offerCoaching: 'Tawarkan Pelatihan', + offerCuts: 'Tawarkan Potong Rambut', + offerDesignArt: 'Tawarkan Desain / Seni', + offerEditing: 'Tawarkan Editing Video', + offerFilming: 'Tawarkan Filming', + offerGraffiti: 'Tawarkan Graffiti', + offerPhotography: 'Tawarkan Fotografi', + offerServices: 'Tawarkan Layanan', + yourProfiles: 'Profil Lab kamu', + preview: { + button: 'Pratinjau', + title: 'Pratinjau langsung', + desc: 'Beginilah tampilan profil {{noun}} kamu setelah dipublikasikan.', + untitled: 'Namamu', + noBio: 'Belum ada bio — tambahkan satu baris tentang apa yang kamu tawarkan.', + years: '{{count}} tahun pengalaman', + portfolio: 'Portofolio', + note: 'Hanya pratinjau — belum ada yang dipublikasikan.', + }, + draft: { + title: 'Kamu punya draf yang belum disimpan', + body: 'Lanjutkan dari tempat kamu berhenti — tidak ada yang dipublikasikan sampai kamu menekan Publikasikan.', + resume: 'Lanjutkan draf', + discard: 'Buang draf', + }, + progress: { + title: 'Kelengkapan profil', + count: '{{done}} dari {{total}} selesai', + photo: 'Foto', + bio: 'Bio', + skills: 'Keterampilan', + rate: 'Tarif', + location: 'Lokasi', + contact: 'Kontak', + }, + wizard: { + identity: 'Identitas', + offer: 'Apa yang kamu tawarkan', + rates: 'Tarif', + contact: 'Kontak', + media: 'Media', + }, + offerTattoo: 'Tawarkan Tato', + offerTraining: 'Tawarkan Latihan / Fisioterapi', + organizeEvents: 'Selenggarakan Event', + resultsMany: '{{count}} hasil', + resultsOne: '{{count}} hasil', + searchCityPlaceholder: 'Kota…', + searchNamePlaceholder: 'Nama, bio…', + showResults: 'Tampilkan Hasil', + showResultsActive: 'Tampilkan Hasil · {{count}} aktif', + skaterWord: 'skater', + sortBy: 'Urutkan', + theCrew: 'Crew', + topRated: 'Rating Teratas', + trusted: 'Tepercaya', + trustLevel: 'Tingkat Kepercayaan', + yearsExp: '{{count}} thn pengalaman', + tabCoaches: 'Coach', + tabFilmers: 'Filmer', + tabPhoto: 'Foto', + tabEditors: 'Editor', + tabBuilders: 'Builder', + tabArtists: 'Artis', + tabGraffiti: 'Graffiti', + tabTattoo: 'Tato', + tabTrainers: 'Pelatih', + tabMusic: 'Musik', + tabJudges: 'Juri', + tabOrganizers: 'Penyelenggara', + tabBarbers: 'Barber', + filterSkillsToLearn: 'Keterampilan untuk Dipelajari', + filterContentType: 'Jenis Konten', + filterEquipmentStyle: 'Peralatan & Gaya', + filterServices: 'Layanan', + filterCamera: 'Kamera', + filterLenses: 'Lensa', + filterLighting: 'Pencahayaan', + filterSupportRig: 'Penopang & Rig', + filterStyle: 'Gaya', + filterWhatTheyBuild: 'Apa yang Mereka Bangun', + filterMaterialsTrade: 'Material & Keahlian', + filterProjectScale: 'Skala Proyek', + filterWhatTheyMake: 'Apa yang Mereka Buat', + filterMedium: 'Media', + filterSoftwareTools: 'Perangkat Lunak & Alat', + filterWorkContext: 'Konteks Kerja', + filterMethod: 'Metode', + filterFocus: 'Fokus', + filterInjuriesTreated: 'Cedera yang Ditangani', + filterCredentialsSetting: 'Kredensial & Pengaturan', + filterGenre: 'Genre', + filterInstrumentsRole: 'Instrumen & Peran', + filterEventFormats: 'Format Event', + filterSpecialty: 'Spesialisasi', + filterLevelCircuit: 'Level / Sirkuit', + filterEventTypes: 'Jenis Event', + filterWhatYouHandle: 'Apa yang Kamu Tangani', + filterScale: 'Skala', + filterWhatTheyOffer: 'Apa yang Mereka Tawarkan', + filterSignatureStyles: 'Gaya Andalan', + filterSetting: 'Pengaturan', + filterEditType: 'Jenis Editing', + role: { + coach: 'Coach', + filmer: 'Filmer', + builder: 'Builder', + editor: 'Editor Video', + photographer: 'Photographer', + skater: 'Skater', + }, + empty: { + footer: 'Ada pertanyaan? Lihat FAQ →', + loginSuffix: 'untuk membuat profil.', + coachesTitle: 'Belum ada coach', + coachesBody: 'Jadilah yang pertama menawarkan pelatihan skateboard di daerahmu.', + filmersTitle: 'Belum ada filmer', + filmersBody: 'Jadilah yang pertama menawarkan filming skate — klip, part penuh, liputan kontes, dan lainnya.', + photographersTitle: 'Belum ada photographer', + photographersBody: 'Jadilah yang pertama menawarkan fotografi skate di daerahmu — foto aksi, sekuens, editorial, dan lainnya.', + editorsTitle: 'Belum ada editor video', + editorsBody: 'Jadilah yang pertama menawarkan jasa editing video skate.', + buildersTitle: 'Belum ada builder', + buildersBody: 'Jadilah yang pertama mendaftarkan pembuatan ramp, park, atau DIY — beton, kayu, rail, dan lainnya.', + artistsTitle: 'Belum ada artis', + artistsBody: 'Jadilah yang pertama menawarkan grafis board, logo, poster, dan merch untuk scene.', + graffitiTitle: 'Belum ada artis graffiti', + graffitiBody: 'Jadilah yang pertama menawarkan piece, mural, dan seni skatepark di daerahmu.', + tattooTitle: 'Belum ada artis tato', + tattooBody: 'Jadilah artis tato budaya skate pertama yang terdaftar — flash, custom, fine line, dan lainnya.', + trainersTitle: 'Belum ada pelatih', + trainersBody: 'Jadilah pelatih atau fisioterapis pertama yang membantu skater jadi kuat dan tetap sehat.', + musiciansTitle: 'Belum ada musisi', + musiciansBody: 'Skate sambil bikin musik? Tambahkan band atau proyek solomu — genre, instrumen, dan tautan.', + judgesTitle: 'Belum ada juri', + judgesBody: 'Menyelenggarakan kontes yang adil? Daftarkan dirimu untuk menilai Game of S.K.A.T.E., best trick jam, kontes, dan singgahan tur.', + organizersTitle: 'Belum ada penyelenggara', + organizersBody: 'Mengadakan jam, kompilasi, meetup, atau demo? Daftarkan dirimu agar skater bisa menemukan dan membookingmu.', + barbersTitle: 'Belum ada barber', + barbersBody: 'Potong rambut skater? Daftarkan kursimu atau layanan kelilingmu agar scene bisa tampil rapi.', + }, + become: { + addNip05: 'Tambahkan NIP-05 di Pengaturan', + backToLab: 'Kembali ke The Lab', + bioWorkLabel: 'Bio / Tentang Karyamu', + checkContact: 'Periksa detail kontakmu', + cityArea: 'Kota / Area', + cityCountry: 'Kota, Negara', + connectWallet: 'Hubungkan Dompet', + connectWalletNwc: 'Hubungkan Dompet dengan NWC', + contactInfo: 'Informasi Kontak', + contactInfoDesc: 'Bagaimana klien dapat menghubungimu (semua opsional, tetapi disarankan)', + coordinatesOptional: 'Koordinat (opsional)', + email: 'Email', + failedToPublish: 'Gagal mempublikasikan', + fromNostrProfile: 'Dari profil Nostr kamu', + geolocationUnsupported: 'Geolokasi tidak didukung', + getting: 'Mengambil…', + headline: 'Judul', + headlineHint: 'Ditampilkan sebagai judul di kartu Lab kamu — mis. “{{example}}”. Default ke namamu.', + imageUploaded: 'Gambar diunggah', + instagram: 'Instagram', + invalidEmail: 'Masukkan alamat email yang valid.', + invalidPortfolio: 'Masukkan URL portofolio yang valid.', + invalidWebsite: 'Masukkan URL situs web yang valid.', + latitude: 'Lintang', + learnHow: 'Pelajari Caranya', + locationError: 'Kesalahan lokasi', + locationFound: 'Lokasi ditemukan', + loginRequired: 'Perlu Masuk', + loginRequiredDesc: 'Kamu perlu masuk untuk membuat profil {{role}}.', + loginRequiredDescCraft: 'Kamu perlu masuk untuk membuat profil {{noun}}.', + longitude: 'Bujur', + nip05Recommended: 'Verifikasi NIP-05 Disarankan', + nip05RecommendedDesc: 'Verifikasi identitasmu untuk membangun kepercayaan dengan klien.', + noWallet: 'Tidak Ada Dompet Terhubung', + otherSocial: 'Media Sosial Lain', + paymentSetup: '⚡ Perlu Pengaturan Pembayaran', + phoneNumber: 'Nomor Telepon', + profilePhoto: 'Foto Profil', + profilePublished: 'Profilmu telah dipublikasikan.', + publishing: 'Mempublikasikan...', + socialMedia: 'Media Sosial', + tip: '💡 Tips: Sebagian besar dompet Lightning mendukung NWC (Alby, Minibits, Zeus, Coinos).', + tipWithTime: '💡 Tips: Sebagian besar dompet Lightning mendukung NWC (Alby, Minibits, Zeus, Coinos). Butuh 30 detik untuk mengaturnya.', + upload: 'Unggah', + uploadFailed: 'Gagal mengunggah', + uploadImage: 'Unggah gambar', + uploading: 'Mengunggah…', + useCurrentLocation: 'Gunakan lokasi saat ini', + useMyLocation: 'Gunakan Lokasi Saya', + usingNwc: 'Menggunakan Nostr Wallet Connect', + usingWebln: 'Menggunakan ekstensi peramban WebLN', + walletConnected: 'Dompet Terhubung — Siap Menerima Pembayaran!', + website: 'Situs Web', + yearsExperience: 'Tahun Pengalaman', + }, + coachForm: { + anonymous: 'Coach Anonim', + bioLabel: 'Bio / Filosofi Pelatihan', + bioPlaceholder: 'Latar belakangmu, gaya mengajar...', + create: 'BUAT PROFIL COACH', + created: 'Profil coach dibuat!', + createPro: 'BUAT PROFIL COACH PRO', + dmNote: '💬 Siswa bisa mengirim pesan langsung kepadamu melalui pesan terenkripsi SkateSpots', + heading: 'Jadi Coach', + headlineExample: 'Coach Skate Berlin', + hourlyRate: 'Tarif per Jam', + identity: 'Identitas Coach Kamu', + nip05Reason: 'Tambahkan pengenal NIP-05 untuk memverifikasi identitasmu dan membangun kepercayaan dengan siswa — ini menunjukkan kamu coach yang sah.', + paymentDesc: 'Untuk menerima pembayaran les dari siswa, kamu perlu menghubungkan dompet Lightning. Siswa akan Zap langsung kepadamu untuk sesi pelatihan.', + profileDesc: 'Beri tahu siswa tentang pengalamanmu', + profileTitle: 'Profil Coach', + ratePlaceholder: '5000 sats/jam', + selectSkill: 'Pilih setidaknya satu keterampilan.', + skillsLabel: 'Keterampilan yang Saya Ajarkan * (pilih setidaknya satu)', + skillsRequired: 'Keterampilan wajib', + formatsLabel: 'Format sesi', + formatsHint: 'Bagaimana kamu memberikan pelatihan.', + levelsLabel: 'Level yang diajarkan', + agesLabel: 'Kelompok usia', + credentialsLabel: 'Kredensial & keamanan', + credentialsHint: 'Diakui sendiri — SkateSpots tidak memverifikasi ini.', + languagesLabel: 'Bahasa yang dikuasai', + languagesHint: 'Tambahkan bahasa yang bisa kamu gunakan untuk melatih.', + languagePlaceholder: 'mis. Indonesia, English', + availabilityLabel: 'Ketersediaan', + bookingLabel: 'Tautan pemesanan', + bookingHint: 'Opsional — halaman tempat siswa bisa memesan dan membayar.', + galleryLabel: 'Foto portofolio', + galleryHint: 'Tunjukkan sesi nyata, siswa, dan spot (maks. 12).', + galleryAdd: 'Tambah foto portofolio', + galleryUploaded: '{{count}} foto diunggah', + videoLabel: 'Reel sorotan', + videoHint: 'Opsional — video YouTube atau Instagram tentang pelatihanmu.', + formatOneOnOne: '1-on-1', + formatGroup: 'Grup', + formatCamp: 'Kamp', + formatVideo: 'Analisis video', + formatContestPrep: 'Persiapan kontes', + formatParkLesson: 'Les park', + formatAdaptive: 'Adaptif', + formatGirls: 'Sesi khusus perempuan', + formatAfterSchool: 'Sepulang sekolah', + levelBeginner: 'Pemula', + levelIntermediate: 'Menengah', + levelAdvanced: 'Mahir', + levelCompetition: 'Kompetisi', + ageKids: 'Anak-anak', + ageTeens: 'Remaja', + ageAdults: 'Dewasa', + ageSeniors: 'Lansia', + certFirstAid: 'Pertolongan pertama', + certCpr: 'CPR', + certSafeguarding: 'Perlindungan anak', + certBackgroundCheck: 'Pemeriksaan latar belakang', + certInsured: 'Terasuransi', + certFederation: 'Coach federasi nasional', + certQualification: 'Kualifikasi pelatihan', + certJudge: 'Juri kompetisi', + certNoteLabel: 'Kredensial lain (opsional)', + certNotePlaceholder: 'mis. Skateboard GB Level 2, 8 tahun melatih…', + availWeekdays: 'Hari kerja', + availWeekends: 'Akhir pekan', + availEvenings: 'Malam', + availAfterSchool: 'Sepulang sekolah', + availHolidays: 'Libur sekolah', + availSeasonal: 'Musiman', + sectionWhatYouCoach: 'Apa yang kamu latih', + sectionCredentials: 'Kredensial & keamanan', + sectionAvailability: 'Ketersediaan & pemesanan', + sectionWhereYouCoach: 'Di mana kamu melatih', + sectionPortfolio: 'Portofolio', + rateAmountLabel: 'Tarif', + rateCurrencySats: 'sats', + rateCurrencyUsd: 'USD', + rateCurrencyEur: 'EUR', + rateCurrencyGbp: 'GBP', + perHour: 'per jam', + perSession: 'per sesi', + perHalfDay: 'per setengah hari', + perDay: 'per hari', + perCamp: 'per kamp', + perProject: 'per proyek', + perEvent: 'per event', + perGig: 'per gig', + perShoot: 'per sesi foto', + perPiece: 'per karya', + perCut: 'per potongan', + perMonth: 'per bulan', + availByAppointment: 'Dengan perjanjian', + rateNotesLabel: 'Catatan tarif (opsional)', + rateNotesPlaceholder: 'Skala geser, sesi pertama gratis, termasuk perjalanan…', + sectionPayments: 'Pembayaran', + paymentMethodsHint: 'Bagaimana klien bisa membayarmu. Ini hanya pernyataan — SkateSpots tidak pernah menahan dana.', + payMethodCash: 'Tunai di lokasi', + payMethodLightning: 'Lightning', + payMethodCashu: 'Cashu', + payMethodBank: 'Transfer bank', + payMethodOther: 'Lainnya', + payWhatYouCanLabel: 'Skala geser / bayar sesuai kemampuan', + bookingFeeLabel: 'Biaya pemesanan (opsional)', + bookingFeeHint: 'Biaya kecil yang dibayarkan langsung kepadamu untuk mengonfirmasi pemesanan. SkateSpots tidak menahan atau mengembalikannya.', + paymentNoteLabel: 'Catatan pembayaran (opsional)', + paymentNotePlaceholder: 'Sesi pertama gratis, termasuk perjalanan, bayar setelah sesi…', + spotsDesc: 'Pilih spot tempat kamu menawarkan sesi pelatihan', + spotsLabel: 'Spot Tempat Kamu Melatih', + tagline: 'Bagikan pengetahuan skateboard-mu', + update: 'PERBARUI PROFIL COACH', + updated: 'Profil coach diperbarui!', + }, + filmerForm: { + anonymous: 'Filmer Anonim', + bioPlaceholder: 'Latar belakangmu, gaya, peralatan...', + camerasLabel: 'Kamera & Peralatan * (pilih setidaknya satu)', + create: 'BUAT PROFIL FILMING', + created: 'Profil filming dibuat!', + createPro: 'BUAT PROFIL FILMING PRO', + dmNote: '💬 Klien bisa mengirim pesan langsung kepadamu melalui pesan terenkripsi SkateSpots', + gearHelper: 'Daftarkan kamera, lensa, dan rig persis milikmu — skater peduli dengan setup-nya.', + gearLabel: 'Isi Tas (opsional)', + gearPlaceholder: 'mis. Sony VX1000 + fisheye MK1, Panasonic HVX200, gimbal DJI RS3, GoPro Hero 12, mic Sennheiser...', + heading: 'Jadi Filmer', + headlineExample: 'Filmer Skate Berlin', + identity: 'Identitas Filmer Kamu', + nip05Reason: 'Tambahkan pengenal NIP-05 untuk memverifikasi identitasmu dan membangun kepercayaan dengan klien — ini menunjukkan kamu filmer yang sah.', + paymentDesc: 'Untuk menerima pembayaran dari klien atas jasa filming, kamu perlu menghubungkan dompet Lightning. Klien akan Zap langsung kepadamu atas karyamu.', + profileDesc: 'Beri tahu klien tentang keahlian filming-mu', + profileTitle: 'Profil Filming', + rate: 'Tarif', + ratePlaceholder: '10000 sats/video', + reelLabel: 'Reel / Portofolio', + selectService: 'Pilih setidaknya satu layanan.', + selectSkill: 'Pilih setidaknya satu keterampilan filming.', + servicesLabel: 'Layanan yang Ditawarkan * (pilih setidaknya satu)', + servicesRequired: 'Layanan wajib', + skillsRequired: 'Keterampilan wajib', + spotsDesc: 'Pilih spot tempat kamu menawarkan jasa filming', + spotsLabel: 'Spot Tempat Kamu Memfilmkan', + tagline: 'Tawarkan filming video skate-mu — klip, line, part penuh & liputan kontes', + update: 'PERBARUI PROFIL FILMING', + updated: 'Profil filming diperbarui!', + }, + editorForm: { + anonymous: 'Editor Anonim', + bioPlaceholder: 'Gaya editing-mu, latar belakang, proyek terkenal…', + contactPortfolio: 'Kontak & Portofolio', + create: 'Publikasikan Profil Editor', + created: 'Profil editor dibuat!', + createPro: 'Publikasikan Profil Editor Pro', + editTypes: 'Jenis Editing yang Ditawarkan * (pilih setidaknya satu)', + hardware: 'Perangkat Keras', + hardwarePlaceholder: 'mis. MacBook Pro M3, Sony FX3', + heading: 'Jadi Editor Video', + headlineExample: 'Editor Video Skate', + identity: 'Identitas Kamu', + locationOptional: 'Lokasi (opsional)', + loginDesc: 'Masuk untuk membuat profil editor videomu.', + phoneTelegram: 'Telepon / Telegram', + portfolioPlaceholder: 'Portofolio (Vimeo, YouTube…)', + profileDesc: 'Beri tahu komunitas tentang gaya dan keterampilan editing-mu', + profileTitle: 'Profil Editor', + published: 'Profilmu telah dipublikasikan ke SkateSpots.', + rate: 'Tarif / Harga', + ratePlaceholder: 'mis. 50k sats/menit, DM untuk penawaran', + selectService: 'Pilih setidaknya satu jenis editing.', + servicesRequired: 'Layanan wajib', + socialPlaceholder: 'Instagram / handle sosial', + software: 'Perangkat Lunak', + softwareHardware: 'Keterampilan Perangkat Lunak & Keras', + softwarePlaceholder: 'mis. DaVinci Resolve, Premiere', + tagline: 'Tawarkan jasa editing videomu ke komunitas skate', + thumbnail: 'Thumbnail Profil / Showreel', + update: 'Perbarui Profil Editor', + updated: 'Profil editor diperbarui!', + walletConnected: 'Dompet Terhubung ✓', + walletDesc: 'Terima pembayaran Bitcoin ⚡ langsung dari klien atas pekerjaan editing-mu.', + walletTitle: '⚡ Dompet Lightning untuk Pembayaran', + yearsExperience: 'Tahun Pengalaman', + yearsPlaceholder: 'mis. 5 tahun', + }, + photoForm: { + anonymous: 'Photographer Anonim', + bioPlaceholder: 'Latar belakangmu, gaya, apa yang suka kamu foto...', + cameraLabel: 'Bodi Kamera * (pilih setidaknya satu)', + cameraRequired: 'Kamera wajib', + contactDesc: 'Bagaimana rider bisa melihat karyamu dan menghubungimu (semua opsional, tetapi disarankan)', + create: 'BUAT PROFIL FOTOGRAFI', + created: 'Profil fotografi dibuat!', + createPro: 'BUAT PROFIL FOTOGRAFI PRO', + dmNote: '💬 Rider bisa mengirim pesan langsung kepadamu melalui pesan terenkripsi SkateSpots', + gearHelper: 'Daftarkan bodi, lensa, dan lampu persis milikmu — rider suka tahu setup-nya.', + gearPlaceholder: 'mis. Canon R6 II, fisheye 8-15mm, 70-200mm f/2.8, 2× Godox AD200, pemicu jarak jauh, tripod Manfrotto...', + heading: 'Jadi Photographer', + headlineExample: 'Fotografi Skate', + identity: 'Identitas Photographer Kamu', + lensesLabel: 'Lensa', + lightingLabel: 'Peralatan Pencahayaan', + nip05Reason: 'Tambahkan pengenal NIP-05 untuk memverifikasi identitasmu dan membangun kepercayaan dengan klien.', + paymentDesc: 'Untuk dibayar atas sesi foto, hubungkan dompet Lightning. Klien akan Zap langsung kepadamu atas karyamu.', + portfolioLabel: 'Portofolio / Instagram', + profileDesc: 'Beri tahu rider tentang instingmu, peralatanmu, dan jasamu', + profileTitle: 'Profil Fotografi', + ratePlaceholder: '20000 sats/sesi foto', + selectCamera: 'Pilih setidaknya satu jenis kamera yang kamu gunakan.', + selectService: 'Pilih setidaknya satu layanan yang kamu tawarkan.', + servicesLabel: 'Layanan yang Ditawarkan * (pilih setidaknya satu)', + servicesRequired: 'Layanan wajib', + spotsDesc: 'Pilih spot tempat kamu menawarkan fotografi', + spotsLabel: 'Spot Tempat Kamu Memotret', + styleLabel: 'Gaya Pemotretan', + supportLabel: 'Penopang & Rig', + tagline: 'Abadikan sesinya — tawarkan fotografi skate-mu', + update: 'PERBARUI PROFIL FOTOGRAFI', + updated: 'Profil fotografi diperbarui!', + }, + builderForm: { + anonymous: 'Builder Anonim', + bioLabel: 'Bio / Tentang Bangunanmu', + bioPlaceholder: 'Crew-mu, bangunan terkenal, cara kamu mendekati proyek...', + buildTypesLabel: 'Apa yang Kamu Bangun * (pilih setidaknya satu)', + buildTypesRequired: 'Jenis bangunan wajib', + cityBase: 'Kota / Basis', + contactPortfolio: 'Kontak & Portofolio', + contactPortfolioDesc: 'Bagaimana scene bisa melihat bangunanmu dan menghubungimu (semua opsional, tetapi disarankan)', + create: 'BUAT PROFIL BUILDER', + created: 'Profil builder dibuat!', + createPro: 'BUAT PROFIL BUILDER PRO', + dmNote: '💬 Klien bisa mengirim pesan langsung kepadamu melalui pesan terenkripsi SkateSpots', + gearHelper: 'Crew dan klien suka tahu peralatan dan prosesmu.', + gearLabel: 'Cara Kamu Bekerja / Peralatan (opsional)', + gearPlaceholder: 'mis. Crew beton penuh, mixer sendiri + rig shotcrete, las keliling, kami mengurus izin dan drainase...', + heading: 'Jadi Builder', + headlineExample: 'Builder Ramp & Park', + identity: 'Identitas Builder Kamu', + insured: 'Berizin / Terasuransi', + insuredHelper: 'Relevan untuk pekerjaan park publik & pemerintah daerah', + logoPhoto: 'Logo / Foto', + materialsLabel: 'Material & Keahlian', + nip05Reason: 'Tambahkan pengenal NIP-05 untuk memverifikasi identitasmu dan membangun kepercayaan dengan klien.', + pastBuilds: 'Bangunan Sebelumnya / Instagram', + paymentDesc: 'Untuk dibayar atas bangunan, hubungkan dompet Lightning. Klien akan Zap langsung kepadamu atas karyamu.', + profileDesc: 'Beri tahu scene apa yang kamu bangun dan bagaimana kamu bekerja', + profileTitle: 'Profil Builder', + rateLabel: 'Tarif / Dasar Penawaran', + ratePlaceholder: 'per m² / per proyek', + scaleLabel: 'Skala Proyek', + selectBuild: 'Pilih setidaknya satu hal yang kamu bangun.', + serviceArea: 'Area Layanan', + serviceAreaPlaceholder: 'mis. Jabodetabek, mau bepergian se-Indonesia', + spotsDesc: 'Tautkan spot dan park yang kamu bangun agar orang bisa melihat karyamu di peta', + spotsLabel: 'Spot yang Pernah Kamu Bangun', + tagline: 'Cor, las, bangun — daftarkan pembuatan ramp & park-mu', + update: 'PERBARUI PROFIL BUILDER', + updated: 'Profil builder diperbarui!', + yearsBuilding: 'Tahun Membangun', + }, + skaterForm: { + backToSkaters: 'Kembali ke Skater', + bioHelperPulled: 'Diambil dari profilmu — sesuaikan untuk kartu skater-mu, atau biarkan apa adanya.', + bioHelperShort: 'Perkenalan singkat untuk kartu skater-mu.', + bioPlaceholder: 'Sudah berapa lama kamu skate, apa yang kamu sukai, apa yang sedang kamu kerjakan…', + browseSpots: 'Jelajahi spot', + changePhoto: 'Ganti foto profil', + chipBio: 'Bio', + chipPhoto: 'Foto', + cityArea: 'Kota / area', + created: 'Kamu sudah ada di peta! 🛹', + custom: 'Kustom', + customHelper: 'Label milikmu — ditampilkan di kartu skater-mu alih-alih preset.', + customPlaceholder: 'mis. OG, Weekend Warrior, Pensiun…', + discoverable: 'Skater lain sekarang bisa menemukanmu.', + editFullProfile: 'edit profil lengkapmu', + fromProfile: 'Dari profilmu', + heroEditPrefix: 'Edit', + heroJoinPrefix: 'Gabung ke', + heroSuffix: 'Direktori', + homeHelper: 'Ketik bebas, atau tautkan spot nyata dari peta agar orang bisa ke sana.', + homePlaceholder: 'Park / plaza lokal — atau ketuk “Jelajahi spot”', + homeSpot: 'Spot rumah', + layerEnd: 'untuk mengubahnya di mana-mana.', + layerIntro: 'Ini adalah', + layerMid: ', dibangun di atas profil Nostr-mu. Nama, foto, bio, lightning & verifikasimu berasal dari sana —', + layerWord: 'lapisan skate', + level: 'Level', + linked: 'Tertaut ke spot di peta', + loadingProfile: 'Memuat profilmu…', + loadingSpots: 'Memuat spot…', + locationHelper: 'Membantu orang lain menemukan skater di dekat mereka. Hanya area kasar yang dibagikan.', + loginToJoin: 'Masuk untuk bergabung', + loginToJoinDesc: 'Buat profil skater-mu agar komunitas bisa menemukanmu.', + mappedSpot: 'Spot di peta', + noSpots: 'Belum ada spot yang ditemukan.', + noSpotsMatch: 'Tidak ada spot yang cocok dengan pencarianmu.', + openMap: 'Buka peta', + pickEverything: 'Pilih semua yang sesuai gayamu.', + pickHomeSpot: 'Pilih spot rumahmu', + pickStyles: 'Pilih gayamu', + pickStylesDesc: 'Pilih setidaknya satu hal yang kamu skate.', + profilePic: 'Foto Profil', + profilePicHelper: 'Kartu skater-mu memakai foto profil Nostr-mu — gambar yang sama di mana-mana.', + publishingAs: 'Mempublikasikan sebagai', + putOnMap: 'Taruh aku di peta', + searchSpots: 'Cari spot berdasarkan nama atau kota…', + skateStory: 'Kisah skate-mu', + stance: 'Stance', + unlinkSpot: 'Lepas tautan spot', + updateButton: 'Perbarui profilku', + updated: 'Profil diperbarui!', + whatYouSkate: 'Apa yang kamu skate *', + yearsPlaceholder: 'mis. 8', + yearsSkating: 'Tahun berskate', + yourProfilePic: 'Foto profilmu', + zapsOn: 'Zap aktif', + }, + skaters: { + clearSearch: 'Hapus pencarian', + community: 'Komunitas', + countMany: 'skater', + countOne: 'skater', + editProfile: 'Edit profil skater-ku', + heroDesc: 'Temukan orang-orangmu. Jelajahi skater yang mewakili SkateSpots — berdasarkan gaya, stance, level, dan kota.', + nip05Verified: 'Terverifikasi NIP-05', + noMatches: 'Tidak ada kecocokan', + noneDesc: 'Jadilah yang pertama bergabung ke direktori dan taruh SkateSpots di peta.', + noneTitle: 'Belum ada skater', + noVerifiedMatch: 'Tidak ada skater terverifikasi yang cocok', + searchPlaceholder: 'Cari berdasarkan nama, kota, atau npub…', + tryDifferentSearch: 'Coba pencarian lain atau hapus filtermu.', + tryTurnOffVerified: 'Coba matikan filter “Terverifikasi” untuk melihat semua orang.', + verifiedFilterTitle: 'Tampilkan hanya skater dengan identitas NIP-05 terverifikasi', + }, + skaterCard: { + inDirectory: 'Kamu ada di Direktori Skater', + joinDesc: 'Tambahkan stance, gaya & levelmu agar skater bisa menemukanmu.', + joinTitle: 'Gabung ke Direktori Skater', + }, + crewsStrip: { + allCrews: 'Semua crew', + memberMany: '{{count}} anggota', + memberOne: '{{count}} anggota', + title: 'Crew di scene ini', + }, + labLink: { + coach: 'Coach', + filmer: 'Filmer', + editor: 'Editor', + photographer: 'Photographer', + builder: 'Builder', + artist: 'Artis', + graffiti: 'Graffiti', + tattoo: 'Tato', + trainer: 'Pelatih', + musician: 'Musisi', + judge: 'Juri', + barber: 'Barber', + organizer: 'Penyelenggara', + lab: 'Lab', + linkedProfiles: 'Profil Lab Tertaut', + desc: 'Jalankan studio, layanan pelatihan, atau pembuatan juga? Tautkan listing Lab-mu agar orang bisa menyewa crew-mu. Opsional. Saat profil Lab juga menautkan kembali ke crew ini, keduanya menampilkan', + descEnd: 'lencana hijau.', + empty: 'Kamu belum punya profil Lab. Buat satu di The Lab untuk menautkannya di sini.', + }, + proUpgrade: { + goPro: 'Jadi Pro', + optional: '· opsional', + freeTo: 'Gratis untuk didaftarkan. Pro menambahkan', + proBadge: 'lencana Pro', + featuredPlacement: 'penempatan unggulan', + atTop: 'di bagian atas The Lab.', + active: 'Aktif', + benefit1: 'Lencana "Pro" emas di profil & kartumu', + benefit2: 'Diunggulkan lebih dulu saat skater menjelajahi The Lab', + benefit3: 'Mendukung SkateSpots — tanpa iklan, tanpa perantara', + platformOwner: 'Pemilik platform — Pro selalu aktif.', + proActiveOne: 'Pro aktif · tersisa {{count}} hari. Profilmu akan diunggulkan.', + proActiveMany: 'Pro aktif · tersisa {{count}} hari. Profilmu akan diunggulkan.', + context: 'Profilmu tetap aktif gratis setelah Pro berakhir — kamu hanya kehilangan lencana & boost.', + }, + profilePreview: { + viewPublic: 'Lihat publik', + unnamed: 'Skater tanpa nama', + noHandle: 'Belum ada handle', + }, + pyramid: { + pyramidWord: 'PYRAMID', + rankingsWord: 'RANKINGS', + subtitle: 'Kontributor teratas di kotamu', + yourRank: 'Peringkatmu', + keepContributing: 'Terus berkontribusi untuk naik lebih tinggi!', + topContributors: 'Kontributor Teratas', + noContributors: 'Belum ada kontributor. Jadilah yang pertama menambah spot atau membuat event!', + spots: 'Spot', + events: 'Event', + total: 'Total', + trust: 'Kepercayaan', + }, + detail: { + joined: 'Bergabung', + about: 'Tentang', + howWeWork: 'Cara Kami Bekerja', + inTheBag: 'Isi Tas', + hardware: 'Perangkat Keras', + software: 'Perangkat Lunak', + eventsJudged: 'Event yang Dinilai', + eventsOrganized: 'Event yang Diselenggarakan', + spots: 'Spot', + viewSpot: 'Lihat spot', + credentialsTitle: 'Kredensial & keamanan', + selfAttested: 'Diakui sendiri oleh coach — tidak diverifikasi oleh SkateSpots.', + formats: 'Format', + levels: 'Level', + ages: 'Usia', + languages: 'Bahasa', + availability: 'Ketersediaan', + bookSession: 'Pesan sesi', + portfolio: 'Portofolio', + watchReel: 'Tonton di {{platform}}', + paymentsTitle: 'Pembayaran', + payWhatYouCan: 'Bayar sesuai kemampuan', + bookingFee: 'Biaya pemesanan', + payBookingFee: 'Bayar biaya pemesanan', + bookingFeeNote: 'Dibayarkan langsung ke coach. SkateSpots tidak menahan atau mengembalikannya.', + bookingFeeNoRail: 'Coach ini tidak menyetel alamat Lightning, jadi pembayaran dalam aplikasi tidak tersedia — hubungi mereka untuk mengatur pembayaran.', + serviceArea: 'Area Layanan', + licensedInsured: 'Berizin / Terasuransi', + studio: 'Studio', + shopStudio: 'Toko / Studio', + booksOpen: 'Terbuka untuk Pesanan', + credentials: 'Kredensial', + remoteOnline: 'Tersedia jarak jauh / online', + graffitiCrew: 'Crew Graffiti', + act: 'Aksi', + listen: 'Dengarkan', + upcomingGigs: 'Gig Mendatang', + past: 'Sebelumnya', + experience: 'Pengalaman', + yearsCount: '{{count}} tahun', + rate: 'Tarif', + contact: 'Kontak', + sendMessage: 'Kirim Pesan', + bookGig: 'Pesan untuk Gig', + portfolioDomain: 'Portofolio · {{domain}}', + manage: 'Kelola', + admin: 'Admin', + editProfile: 'Edit profil', + publishedTitle: 'Kamu sudah tayang', + publishedBody: 'Profilmu dipublikasikan ke The Lab. Bagikan agar skater bisa menemukanmu.', + manageRemove: 'Hapus profil {{noun}} kamu dari The Lab.', + adminTakeDown: 'Turunkan profil {{noun}} ini. Ini akan disembunyikan di seluruh SkateSpots.', + entityLabel: 'Profil {{noun}}', + deleteProfile: 'Hapus Profil', + location: 'Lokasi', + servicesSkills: 'Layanan & Keterampilan', + noun: { + coach: 'coach', + filmer: 'filmer', + editor: 'editor video', + photographer: 'photographer', + builder: 'builder', + artist: 'artis', + graffiti: 'artis graffiti', + tattoo: 'artis tato', + trainer: 'pelatih', + musician: 'musisi', + judge: 'juri event', + organizer: 'penyelenggara event', + barber: 'barber', + profile: 'profil', + }, + skillsTitle: { + skills: 'Keterampilan', + servicesGear: 'Layanan & Peralatan', + whatWeBuild: 'Apa yang Kami Bangun', + whatTheyMake: 'Apa yang Mereka Buat', + stylesWork: 'Gaya & Karya', + styles: 'Gaya', + focusSpecialties: 'Fokus & Spesialisasi', + genresInstruments: 'Genre & Instrumen', + formatsSpecialties: 'Format & Spesialisasi', + servicesStyles: 'Layanan & Gaya', + eventTypesServices: 'Jenis Event & Layanan', + }, + }, + rider: { + heroDesc: 'Identitas skater-mu yang dapat diverifikasi. Ditandatangani Nostr, siap cetak, mustahil dipalsukan.', + heroDesc2: 'Dapatkan lencana keterampilan yang disaksikan skater lain. Dapatkan pass akses park. Bagikan kartumu di mana saja.', + headerTagline: 'Ditandatangani Nostr · Siap cetak · Terverifikasi QR', + tabCard: 'Kartuku', + tabBadges: 'Lencana', + tabAward: 'Anugerahkan', + rendering: 'Merender…', + shareCard: 'Bagikan Kartu', + savePng: 'Simpan PNG', + print: 'Cetak', + copyId: 'Salin ID', + cardType: 'Jenis Kartu', + licenseLabel: 'Lisensi Skater', + licenseSub: 'Identitas rider pribadimu', + parkLabel: 'Akses Park', + parkSub: 'Terbitkan pass sebagai pemilik park', + theme: 'Tema', + holoTitle: 'Kilau Holografik', + holoDesc: 'Efek foil beranimasi', + cardDetails: 'Detail Kartu', + skateStyle: 'Gaya Skate', + ridesFor: 'Membela', + ridesForPlaceholder: 'Toko lokal…', + sponsors: 'Sponsor', + sponsorsPlaceholder: 'Merek…', + showOnCard: 'Tampilkan di Kartu', + zaps: 'Zap ⚡', + skills: 'Keterampilan', + selected: '{{count}}/6 dipilih', + goldBadgesHint1: 'Lencana emas di kartumu berasal dari skater lain yang menyaksikanmu — lihat', + goldBadgesHint2: '.', + parkOwnersOnly: 'Hanya pemilik park.', + parkOwnersDesc: 'Terbitkan ini menggunakan kunci Nostr yang sama yang mempublikasikan listing park-mu. Siapa pun bisa memindai QR dan memverifikasi tanda tangan on-chain — tanpa otoritas pusat.', + parkDetails: 'Detail Park', + parkName: 'Nama Park', + parkNamePlaceholder: 'The Berrics…', + riderName: 'Nama Rider', + riderNamePlaceholder: 'Nama di kartu', + riderNpub: 'ID Nostr Rider (npub)', + accessLevel: 'Tingkat Akses', + validThru: 'Berlaku Hingga', + publishToNostr: 'Publikasikan ke Nostr', + badgesIntro: 'Lencana ini disaksikan dan ditandatangani skater lain di Nostr. Lencana ini muncul sebagai chip ⭐ emas di kartumu.', + earnMore: 'Ingin mendapat lebih banyak? Skate di depan seseorang dan minta mereka menyaksikan trick-mu.', + awardSomeone: 'Anugerahkan Lencana ke Orang Lain', + youSawIt: 'Kamu melihatnya terjadi', + youSawItDesc: 'Tandatangani bukti di Nostr. Ini menjadi bagian dari catatan permanen mereka — terikat secara kriptografis ke kuncimu.', + skillsWitnessed: 'Keterampilan yang kamu saksikan', + whereSeen: 'Di mana kamu melihatnya?', + optional: '(opsional)', + signingOnNostr: 'Menandatangani di Nostr…', + awardBadge: 'Anugerahkan Lencana', + addRiderSkill: 'Tambahkan npub rider + setidaknya satu keterampilan', + invalidNpub: 'npub tidak valid', + badgeAwarded: '🏅 Lencana dianugerahkan!', + badgeSent: '{{skills}} terkirim.', + failed: 'Gagal', + couldNotRender: 'Tidak dapat merender kartu', + popupBlocked: 'Popup diblokir', + popupBlockedDesc: 'Izinkan popup untuk situs ini.', + linkCopied: '🔗 Tautan disalin!', + enterRiderNpub: 'Masukkan npub rider', + parkPublished: '✅ Kartu Akses Park dipublikasikan!', + publishFailed: 'Gagal mempublikasikan', + noBadges: 'Belum ada lencana. Skate di depan seseorang dan minta mereka menyaksikan trick-mu!', + showMore: 'Tampilkan {{count}} lagi', + witnessedBy: 'Disaksikan oleh', + at: 'di', + previewLicense: 'Lisensi Skater', + previewSince: 'Sejak {{year}}', + previewEvts: 'Evts', + previewScan: 'Pindai untuk verifikasi', + previewSkatepark: 'Skatepark', + previewAccessPass: 'Pass Akses', + previewMemberName: 'Nama Anggota', + previewIssuedBy: 'Diterbitkan pemilik park · Ditandatangani Nostr', + previewValidThru: 'Berlaku hingga', + previewNostrVerified: 'Terverifikasi Nostr', + }, + craftFields: { + detailsTitle: 'Detail tambahan', + deliverables: 'Hasil karya', + turnaround: 'Waktu penyelesaian', + surfaces: 'Permukaan / Dinding', + maxSize: 'Ukuran Maks', + setLength: 'Durasi Set', + techRider: 'Tech Rider', + travel: 'Perjalanan', + certifications: 'Sertifikasi', + insurance: 'Asuransi', + permits: 'Izin', + deposit: 'Deposit', + minimum: 'Minimum', + modalities: 'Modalitas', + duration: 'Durasi Janji Temu', + drone: 'Drone', + leadTime: 'Waktu Persiapan', + warranty: 'Garansi', + }, + craftForm: { + profileImage: 'Gambar profil', + nameHeadline: 'Nama / judul', + about: 'Tentang', + aboutPlaceholder: 'Beri tahu skater tentang karya {{noun}}-mu…', + required: 'wajib', + nip05Title: 'Tambahkan NIP-05 untuk membangun kepercayaan', + nip05Desc: 'Pengenal NIP-05 membantu skater memverifikasi bahwa kamu asli. Sangat disarankan sebelum mendaftar.', + editingNote: 'Mengedit profil {{noun}} kamu yang sudah ada — mempublikasikan akan menggantinya.', + location: 'Lokasi', + pinned: '📍 Dipatok ke peta ({{lat}}, {{lng}})', + experienceYears: 'Pengalaman (tahun)', + expPlaceholder: 'mis. 5', + ratePlaceholder: 'mis. 20k sats / per proyek', + contactLinks: 'Kontak & Tautan', + phoneOptional: 'Telepon (opsional)', + emailOptional: 'Email (opsional)', + socialPlaceholder: 'Sosial (Instagram, dll.)', + gettingPaid: 'Menerima Pembayaran', + updateProfile: 'Perbarui Profil', + publishProfile: 'Publikasikan Profil', + rateLeftBlankNote: 'Opsional — biarkan kosong jika tarif di atas sudah cukup.', + sectionRequired: '{{section}} wajib', + sectionRequiredDesc: 'Pilih setidaknya satu opsi di "{{section}}".', + updated: 'Profil diperbarui!', + created: 'Profil dibuat!', + headlineExample: 'Coach Skate Berlin', + }, + }, + socialUi: { + agentPanel: { + spot: 'Spot', + event: 'Event', + labPro: 'Lab pro', + gear: 'Peralatan', + crew: 'Crew', + description: 'Mengenal crew ini — jam-nya, roster & open call — plus scene yang lebih luas dengan data langsung.', + greeting: "Yo! Aku Sasquatch, pemandu {{crew}}. Tanya aku tentang crew — jam berikutnya, siapa yang mengurusnya, apa yang kami cari — atau scene yang lebih luas.", + suggestion1: 'Jam kita berikutnya kapan?', + suggestion2: 'Siapa yang mengurus crew ini?', + suggestion3: 'Apa yang kami cari?', + suggestion4: 'Spot terbaik di dekat kita?', + suggestion5: 'Bagaimana cuaca untuk skate?', + thinking: 'Sasquatch sedang berpikir…', + placeholder: 'Tanya tentang scene lokalmu…', + disclaimer: 'AI bisa salah — tautan mengarah ke listing nyata.', + }, + badge: { + upcomingOne: '{{count}} event mendatang', + upcomingMany: '{{count}} event mendatang', + comingOne: '{{count}} event akan datang', + comingMany: '{{count}} event akan datang', + }, + bell: { + youAreIn: 'Kamu ada di {{crew}}! 🛹', + membershipConfirmed: 'Keanggotaan dikonfirmasi.', + couldNotConfirm: 'Tidak dapat mengonfirmasi', + addedYouTo: 'menambahkanmu ke', + confirmToAppear: 'Konfirmasi untuk tampil sebagai anggota.', + notifications: 'Notifikasi', + notificationsNew: 'Notifikasi ({{count}} baru)', + unreadCount: '{{count}} notifikasi belum dibaca', + markRead: 'Tandai dibaca', + allClear: 'Semua jelas', + tabAll: 'Semua', + tabTrades: 'Transaksi', + tabSocial: 'Sosial', + tabNews: 'Berita', + tabCrews: 'Crew', + checkingUpdates: 'Memeriksa pembaruan…', + checkingTrades: 'Memeriksa penawaran dan transaksi…', + loadingDrops: 'Memuat drop terbaru…', + emptyAll: 'Penawaran, transaksi, Zap, balasan, drop buletin, dan aktivitas crew akan muncul di sini.', + emptyTrades: 'Penawaran, penawaran balik, dan konfirmasi transaksi semuanya mendarat di sini — baik kamu menjual, membeli, atau menukar.', + emptySocial: 'Zap, reaksi, repost, mention, balasan, RSVP event, dan pembaruan penyelenggara semuanya mendarat di sini.', + emptyNews: 'Drop buletin SkateSpots akan mendarat di sini. Berlangganan di halaman Buletin.', + emptyCrews: 'Undangan crew, permintaan kolektif, dan permintaan keanggotaan akan muncul di sini.', + subscribeBanner: 'Berlangganan untuk mendapat drop baru di loncengmu', + read: 'Baca', + allCaughtUp: 'Kamu sudah menyusul semuanya', + }, + chat: { + hidden: 'Disembunyikan', + hideMessageAria: 'Sembunyikan pesan ini', + hideMessageTitle: 'Sembunyikan pesan (admin)', + messageHidden: 'Pesan disembunyikan', + messageHiddenDesc: 'Disembunyikan dari chat crew untuk semua orang.', + messageHideFailed: 'Gagal menyembunyikan pesan', + encryptionUnavailable: 'Enkripsi tidak tersedia', + encryptionUnavailableDesc: 'Penandatanganmu tidak mendukung enkripsi NIP-44. Harap perbarui ekstensimu.', + messageFailed: 'Pesan gagal', + couldNotSend: 'Tidak dapat mengirim pesan.', + noOneToMessage: 'Belum ada yang bisa dikirimi pesan', + noOneToMessageDesc: 'Crew ini tidak punya anggota lain untuk diajak chat.', + subject: 'Chat crew {{crew}}', + title: 'Chat Crew', + cordnBadgeTitle: 'Dirutekan melalui koordinator Cordn crew ini via ContextVM. Terenkripsi ujung-ke-ujung.', + private: 'Privat', + privateBadgeTitle: 'Terenkripsi ujung-ke-ujung — hanya anggota crew yang bisa membaca pesan ini.', + encryptedCordn: 'Terenkripsi & dirutekan melalui koordinator crew (Cordn) — tidak ada pesan yang menyentuh relay publik.', + encryptedNip17: 'Chat grup terenkripsi untuk pendiri & semua anggota crew yang terdaftar.', + moderatorNote: ' Sebagai moderator, kamu bisa menyembunyikan pesan dari crew.', + loginToSee: 'Masuk untuk melihat apakah kamu bisa bergabung ke chat crew.', + membersOnly: 'Chat ini privat untuk anggota crew. Minta pendiri menambahkanmu ke crew untuk ikut serta dalam percakapan.', + noMessages: 'Belum ada pesan. Mulai chat crew — rencanakan sesi, bagikan spot, soraki klip.', + newMessages: 'Pesan baru', + new: 'Baru', + placeholder: 'Kirim pesan ke crew-mu…', + sendAria: 'Kirim pesan', + }, + collectiveJoinRequest: { + addedTitle: 'Menambahkan {{name}} ke {{collective}} 🛹', + addedDesc: 'Mereka akan mengonfirmasi dari sisi mereka untuk tampil sebagai anggota terverifikasi.', + couldNotAdd: 'Tidak dapat menambahkan anggota', + couldNotDismiss: 'Tidak dapat mengabaikan', + addedDone: 'Ditambahkan', + addedTo: 'ke', + dismissedDone: 'Mengabaikan permintaan dari {{name}}', + wantsToJoin: 'ingin bergabung', + alreadyOnRoster: 'Sudah ada di roster', + openCollective: 'Buka kolektif', + dismiss: 'Abaikan', + addToCollective: 'Tambahkan ke kolektif', + }, + collectiveMembers: { + confirmed: 'Terkonfirmasi', + pending: 'Menunggu', + pendingTooltip: 'Terdaftar oleh kolektif — menunggu konfirmasi anggota ini.', + crewOnly: 'Hanya crew', + crewOnlyTooltip: 'Anggota ini memilih hanya terlihat oleh rekan crew. Kamu bisa melihatnya karena kamu ada di crew.', + hiddenMember: 'Anggota tersembunyi', + title: 'Anggota', + verifiedOf: '{{confirmed}} dari {{total}} terverifikasi — setiap anggota yang terkonfirmasi menandatangani dengan kunci Nostr mereka sendiri.', + verifiedPerMember: 'Keanggotaan diverifikasi per anggota. Setiap anggota mengonfirmasi dengan kunci Nostr mereka sendiri.', + adminsOne: '{{count}} admin membantu menjalankan crew.', + adminsMany: '{{count}} admin membantu menjalankan crew.', + }, + confirmMembership: { + public: 'Publik', + crewOnly: 'Hanya crew', + confirmedTitle: 'Keanggotaan dikonfirmasi!', + confirmedCrew: 'Kamu terverifikasi di {{name}} — hanya terlihat oleh rekan crew.', + confirmedPublic: 'Kamu sekarang tampil sebagai anggota terverifikasi {{name}}.', + failed: 'Gagal mengonfirmasi', + addedTo: 'Kamu telah ditambahkan ke {{name}}', + addedDesc: 'Konfirmasi keanggotaanmu agar tampil sebagai terverifikasi di profilmu dan profil mereka.', + yourVisibility: 'Visibilitas kamu', + confirming: 'Mengonfirmasi…', + confirmButton: 'Konfirmasi Keanggotaan', + }, + contacts: { + message: 'Pesan', + removePrivate: 'Hapus dari kontak privat', + savePrivate: 'Simpan ke kontak privat', + seoTitle: 'Kontak - SkateSpots', + seoDescription: 'Scenemu — rekan crew, orang yang kamu ikuti, dan percakapan terbaru, dengan kontak terenkripsi privat.', + encryptionUnavailableDesc: 'Penandatanganmu tidak mendukung enkripsi NIP-44.', + removed: 'Dihapus dari kontak privat', + saved: 'Disimpan ke kontak privat', + savedDesc: 'Hanya kamu yang bisa melihat daftar ini.', + updateFailed: 'Tidak dapat memperbarui kontak', + loginTitle: 'Scenemu, di satu tempat', + loginDesc: 'Masuk untuk melihat rekan crew-mu, orang yang kamu ikuti, dan percakapan terbaru — serta simpan daftar kontak privat yang terenkripsi.', + title: 'Kontak', + subtitle: 'Scenemu — rekan crew, follow & percakapan', + filterPlaceholder: 'Filter berdasarkan npub…', + tabCrew: 'Crew', + tabFollows: 'Mengikuti', + tabDms: 'DM', + tabSaved: 'Disimpan', + emptyCrewmates: 'Belum ada rekan crew. Gabung atau mulai crew untuk membangun jaringan scenemu.', + emptyFollowing: 'Kamu belum mengikuti siapa pun.', + emptyDms: 'Belum ada percakapan. Kirimi pesan seorang skater untuk memulainya.', + savedHint: 'Daftar ini dienkripsi dengan kuncimu — hanya kamu yang bisa membacanya. Ketuk bintang pada siapa pun untuk menambahkannya.', + emptySaved: 'Belum ada kontak tersimpan. Beri bintang orang dari tab mana pun untuk membangun buku alamat privatmu.', + }, + conversation: { + unknown: 'Tidak diketahui', + seoTitle: 'Chat dengan {{name}} - SkateSpots', + seoDescription: 'Percakapan terenkripsi privat', + sendFailed: 'Pesan gagal terkirim', + sendFailedDesc: 'Coba lagi sebentar lagi.', + tradeConfirmed: 'Transaksi dikonfirmasi', + tradeConfirmedDesc: 'Reputasi diperbarui untuk kalian berdua.', + tradeConfirmFailed: 'Tidak dapat mengonfirmasi transaksi', + somethingWrong: 'Terjadi kesalahan.', + soldNote: 'Terjual ke {{name}}.', + saleConfirmed: 'Penjualan dikonfirmasi', + saleConfirmedDesc: '{{name}} sekarang bisa mengonfirmasi sisi mereka.', + saleConfirmFailed: 'Tidak dapat mengonfirmasi penjualan', + escrowRedeemed: 'Escrow ditukarkan', + escrowRedeemedDesc: 'Dananya sekarang ada di dompet Cashu-mu.', + escrowRedeemFailed: 'Tidak dapat menukarkan escrow', + loginTitle: 'Masuk untuk melihat pesan', + secureLoginTitle: 'Perlu Masuk Aman', + secureLoginDesc: 'Pesan memerlukan aplikasi penandatangan yang aman.', + encrypted: 'Terenkripsi', + refresh: 'Muat ulang', + didCompleteTrade: 'Apakah kamu menyelesaikan transaksi ini?', + recordedSale: '{{name}} mencatat penjualan. Konfirmasi untuk memperbarui reputasi kalian berdua.', + confirm: 'Konfirmasi', + confirmSale: 'Konfirmasi penjualan ini?', + askedToRecord: '{{name}} memintamu mencatatnya. Mengonfirmasi membangun reputasi kalian berdua.', + confirmSaleButton: 'Konfirmasi penjualan', + redeemEscrow: 'Tukarkan escrow', + escrowAppOnly: 'Escrow Cashu hanya di aplikasi — buka SkateSpots di ponselmu untuk menukarkan.', + startThread: 'Kirim pesan untuk memulai percakapan', + placeholder: 'Ketik pesan...', + e2eeNote: 'Pesan terenkripsi ujung-ke-ujung menggunakan NIP-17', + }, + coordinator: { + secondsAgo: '{{count}}d lalu', + minutesAgo: '{{count}}m lalu', + hoursAgo: '{{count}}j lalu', + daysAgo: '{{count}}h lalu', + statusIdle: 'Belum diperiksa', + statusChecking: 'Memeriksa…', + statusOnline: 'Terhubung', + statusStale: 'Sepi', + statusOffline: 'Tidak terlihat', + statusError: 'Tidak terjangkau', + notACoordinator: 'Itu bukan koordinator', + notACoordinatorDesc: 'Tempel nprofile, npub, atau tautan cordn.net.', + added: 'Koordinator ditambahkan', + relayOne: '{{count}} relay', + relayMany: '{{count}} relay', + lastSeen: 'terakhir terlihat {{time}}', + onlineDesc: 'Mengumumkan. Grup yang menggunakannya bisa mengirim pesan sekarang.', + staleDesc: 'Ditemukan, tetapi belum mengumumkan baru-baru ini — mungkin sedang tidur.', + offlineDesc: 'Tidak ada pengumuman terlihat. Mungkin privat (itu tidak masalah), atau sekadar offline.', + errorDesc: 'Tidak dapat menjangkau relay.', + idleDesc: 'Memeriksa…', + checkingDesc: 'Mencari pengumumannya…', + eventFoundOne: '{{count}} event ditemukan.', + eventFoundMany: '{{count}} event ditemukan.', + check: 'Periksa', + addLinkCopied: 'Tautan tambah disalin', + copyFailed: 'Gagal menyalin', + copyManually: 'Salin secara manual.', + addLink: 'Tautan tambah', + removeConfirm: 'Hapus koordinator ini dari perangkat ini?', + scanToJoin: 'Pindai di Cordn untuk bergabung ke koordinator ini.', + noCoordinator: 'Belum ada koordinator', + noCoordinatorDescA: 'Koordinator mengantarkan', + encryptedWord: 'terenkripsi', + noCoordinatorDescB: 'pesan grup crew-mu secara berurutan. Ia melihat siapa, kapan, dan grup mana — tidak pernah isinya. Pilih satu, atau jalankan milikmu sendiri.', + change: 'Ganti koordinator', + addTitle: 'Tambahkan koordinator', + add: 'Tambah', + scanQR: 'Pindai QR koordinator', + inputPlaceholder: 'nprofile… atau tautan cordn.net', + runOwn: 'Jalankan milikmu sendiri', + runOwnDesc: 'Ia bisa hidup di ponsel lama, Raspberry Pi, atau kotak kecil apa pun yang kamu biarkan menyala. Grupmu tetap bekerja selama ia hidup — dan kamu bisa memindahkan grup kapan saja.', + onPhone: 'Di ponsel', + onPhoneDesc: 'Gunakan aplikasi Cordn Coordinator, lalu pindai QR-nya di sini untuk menambahkannya.', + openCordn: 'Buka Cordn', + scanItsQR: 'Pindai QR-nya', + onServer: 'Di server', + commandCopied: 'Perintah disalin', + copyCommand: 'Salin perintah', + androidSleep: 'Android mungkin menidurkan koordinator ponsel. Bersiaplah memindahkan grup sesekali.', + privacyNote: '🔒 Koordinator hanya melihat ciphertext dan metadata — tidak pernah isi pesan. Jalankan milikmu sendiri agar bahkan metadatanya tetap milikmu.', + customTitle: 'Koordinator Chat Kustom', + customBadge: '· eksperimental · relay milikmu sendiri', + customDescShort: 'Opsional — crew-mu sudah punya chat terenkripsi ujung-ke-ujung bawaan, jadi kamu tidak butuh ini. Setel hanya jika kamu menjalankan sendiri', + remove: 'Hapus', + pointerNote: 'Hanya penunjuk untuk sekarang: endpoint wss:// digunakan sebagai relay chat crew; yang https:// melalui relay ContextVM bersama. MLS Cordn sungguhan belum terhubung.', + cordnCoordinator: 'Koordinator Cordn', + invalid: 'Itu tampaknya bukan koordinator. Tempel nprofile, tautan cordn.net, atau URL https/wss.', + useMine: 'Gunakan koordinatorku', + }, + createCrew: { + seoTitle: 'Buat Crew - SkateSpots', + seoDescription: 'Buat crew skate-mu — home turf, anggota, dan spot.', + loginRequired: 'Perlu Masuk', + loginRequiredDesc: 'Kamu perlu masuk untuk membuat crew.', + backToCrews: 'Kembali ke Crew', + title: 'Buat Crew', + intro: 'Keluarga skate-mu — orang-orang yang kamu ajak skate. Cukup nama untuk memulai; sisanya opsional.', + }, + crew: { + seoTitleNamed: '{{name}} - Crew SkateSpots', + seoTitle: 'Crew - SkateSpots', + seoDescription: 'Crew skate di SkateSpots.', + postHidden: 'Postingan disembunyikan', + postHiddenDesc: 'Dihapus dari feed crew untuk semua orang.', + postHideFailed: 'Gagal menyembunyikan postingan', + backToCrews: 'Kembali ke Crew', + disband: 'Bubarkan', + youAreCaptain: 'Kamu seorang kapten', + member: 'Anggota', + askSasquatch: 'Tanya Sasquatch', + agent: 'Agen Crew', + agentDesc: 'Pemandu AI crew-mu — spot, event, coach & perlengkapan terdekat, dengan data langsung.', + eventsTab: 'Event', + chatTab: 'Chat', + newMessages: 'Pesan baru', + hostJam: 'Selenggarakan jam', + noEvents: 'Belum ada event crew. Selenggarakan jam, kompilasi, atau meetup sebagai crew — ini menghubungkan crew-mu ke kalender event dan memungkinkan orang men-Zap-nya.', + support: 'Dukung', + zapCrew: 'Zap Crew', + bandTitle: 'Band Crew', + bandTagline: 'Musik live · skate & suara', + listenTitle: 'Dengarkan: {{domain}}', + listen: 'Dengarkan lagunya', + setUpGig: 'Atur gig', + bookGigMessage: 'Hai {{crew}} — tertarik memesan {{band}} untuk gig. Kamu ada waktu untuk bicara tanggal?', + messageAboutGig: 'Pesan tentang gig', + gigHintA: 'menambahkan event musik ke kalender yang diselenggarakan crew ini.', + messageShort: 'Pesan', + gigHintB: 'membuka DM terenkripsi ke crew untuk mengatur tanggal & detail.', + homeSpots: 'Spot Rumah', + viewSpot: 'Lihat spot', + seeOnMap: 'Lihat di peta →', + founderLinks: 'Pendiri & Tautan', + startedBy: 'Dimulai oleh {{name}}', + opens: 'Membuka: {{domain}}', + }, + crews: { + seoTitle: 'Crew - SkateSpots', + seoDescription: 'Temukan orang-orangmu. Jelajahi crew skate lokal, kolektif, dan komunitas di dekatmu.', + videoPartTooltip: 'Crew ini punya video part', + part: 'Part', + bandTooltip: 'Band crew: {{name}}', + band: 'Band', + focusAll: 'Semua', + focusAllShort: 'Semua', + focusDiy: 'DIY', + focusPhoto: 'Foto', + focusCoaching: 'Pelatihan', + focusArt: 'Seni', + focusMusic: 'Musik', + focusPhysio: 'Fisio', + focusMixed: 'Campuran', + title: 'Crew', + heroLine: 'Keluarga skate-mu yang berlabuh di peta — orang-orang yang kamu ajak skate', + heroWith: 'bersama', + heroRest: ', bukan orang yang kamu sewa (itu The Lab).', + crewCountOne: '{{count}} crew', + crewCountMany: '{{count}} crew', + cityCountOne: '{{count}} kota', + cityCountMany: '{{count}} kota', + createCrew: 'Buat Crew', + create: 'Buat', + searchPlaceholder: 'Cari crew berdasarkan nama atau kota…', + filterTitle: 'Filter crew', + filterDesc: 'Apa yang disukai crew ini.', + nearMe: 'Dekat saya', + emptySearchTitle: 'Tidak ada crew yang cocok dengan pencarianmu', + emptySearchHint: 'Tidak ada yang ditemukan untuk “{{query}}”. Coba nama atau kota lain.', + clearSearch: 'Hapus pencarian', + emptyFocusTitle: 'Belum ada crew {{label}}', + emptyFocusHint: 'Belum ada yang mengibarkan bendera “{{label}}” di sini. Tampilkan semua crew, atau mulai sendiri.', + showAll: 'Tampilkan semua crew', + claimTitle: 'Klaim scene lokalmu', + claimHint: 'Belum ada crew yang ditanam di sini. Jadilah yang pertama — mulai crew-mu, tautkan spot rumahmu, dan taruh scenemu di peta agar semua orang bisa menemukannya.', + }, + crewCoordinator: { + privateChat: 'Chat Crew Privat', + on: 'Aktif', + defaultA: 'Tab', + chatWord: 'Chat', + defaultB: 'bersifat', + e2ee: 'terenkripsi ujung-ke-ujung', + defaultC: 'untuk pendiri dan semua anggota terdaftar — tidak ada yang perlu diatur. Pesan disegel ke kunci setiap anggota (NIP-17), jadi hanya crew-mu yang bisa membacanya.', + advancedA: 'Lanjutan: jalankan milikmu sendiri', + cordnCoordinator: 'Koordinator Cordn', + routeThrough: 'Rutekan chat melaluinya', + coordinator: 'Koordinator', + deliveredOver: 'Dikirim melalui', + sharedRelay: '— relay ContextVM bersama.', + ownRelay: '— relay milik crew-mu sendiri.', + chatLive: 'Chat privat aktif', + routesA: 'Tab', + routesB: 'dirutekan melalui koordinator ini: pesan terenkripsi ujung-ke-ujung (NIP-44, disegel ke setiap anggota), jadi ia hanya menangani lalu lintas tersegel.', + publicWarning: 'Perhatian: ia dialamatkan melalui relay ContextVM bersama, jadi ciphertext dan metadatanya (crew mana, dan kapan) terlihat publik — hanya tidak bisa dibaca. Arahkan crew ke relay wss:// privat agar itu pun tetap privat.', + ownRelaySafe: 'Tidak ada yang khusus crew keluar dari relay crew-mu sendiri.', + manage: 'Kelola koordinator', + open: 'Buka {{domain}}', + runBy: 'Koordinator dijalankan oleh', + }, + dms: { + securityReminder: 'Pengingat keamanan', + phishingStrong: 'SkateSpots tidak akan pernah mengirimimu DM', + phishingRest: 'meminta memverifikasi akunmu, membagikan kuncimu, atau mengirim pembayaran. Jika seseorang mengaku sebagai dukungan SkateSpots via DM — itu penipuan.', + dismissReminder: 'Abaikan pengingat keamanan', + peopleCount: '{{count}} orang', + youPrefix: 'Kamu: ', + unreadMessages: 'Pesan belum dibaca', + seoTitle: 'Pesan - SkateSpots', + seoDescription: 'Pesan terenkripsi privat dengan komunitas skateboard', + loginTitle: 'Masuk untuk mengakses pesan', + loginDesc: 'Pesan privat dan terenkripsi dengan skater di komunitas', + secureLoginTitle: 'Perlu Masuk Aman', + secureLoginDesc: 'Pesan privat memerlukan aplikasi penandatangan yang aman untuk mengenkripsi percakapanmu.', + onAndroid: 'Di Android:', + useAmber: 'Gunakan aplikasi Amber', + getAmber: 'Dapatkan Amber →', + onIOS: 'Di iOS:', + iosHint: 'Coba masuk dengan koneksi bunker (nsec.app) dari Pengaturan', + browserHint: 'Coba masuk dengan ekstensi peramban seperti Alby atau nos2x yang mendukung enkripsi.', + title: 'Pesan', + subtitleFull: 'Terenkripsi ujung-ke-ujung dengan NIP-17', + subtitleShort: 'Terenkripsi', + newMessage: 'Pesan Baru', + groups: 'Grup', + loadFailed: 'Gagal memuat pesan', + emptyTitle: 'Belum ada pesan', + emptyDesc: 'Mulai percakapan dengan seseorang di komunitas', + startConversation: 'Mulai Percakapan', + undecryptableOne: '{{count}} pesan terenkripsi tidak dapat dibuka oleh penandatanganmu.', + undecryptableMany: '{{count}} pesan terenkripsi tidak dapat dibuka oleh penandatanganmu.', + }, + editCrew: { + seoTitleNamed: 'Edit {{name}} - SkateSpots', + seoTitle: 'Edit Crew - SkateSpots', + seoDescription: 'Edit crew skate-mu.', + loginRequired: 'Perlu Masuk', + notYours: 'Bukan crew-mu', + notYoursDesc: 'Hanya pendiri crew yang bisa mengedit crew ini.', + backToCrew: 'Kembali ke Crew', + title: 'Edit Crew', + }, + form: { + add: 'Tambah', + added: 'Ditambahkan', + addNameInBasicsA: 'Tambahkan nama crew kembali di', + addNameInBasicsB: 'untuk menyelesaikan.', + adminsDescA: 'Jadikan anggota tepercaya', + adminsWord: 'admin', + adminsDescB: '— mereka bisa mengundang anggota dan memoderasi feed & chat crew dengan kunci mereka sendiri. Kamu (pendiri) selalu tetap pemilik identitas crew.', + agentDescA: 'Tambahkan', + agentDescB: ', pemandu AI yang benar-benar mengenal crew-mu. Anggota bisa bertanya tentang', + agentDescC: '— plus spot, event, coach, dan perlengkapan terdekat dari data langsung SkateSpots. Berjalan langsung di peramban; tanpa kunci atau pengaturan. Masih awal (AI tingkat gratis, jadi kadang lambat).', + agentDescStrong: 'jam berikutnya, siapa yang mengurus crew, apa yang kamu cari, dan vibe-mu', + agentEnabledNote: 'Sasquatch akan muncul di halaman crew-mu setelah kamu menyimpan.', + bandDesc: 'Punya band? Scene skate dan musik lokal berjalan seiring — masukkan nama bandmu dan tautan ke lagunya.', + bandFooterA: 'Untuk profil band lengkap (genre, instrumen, gig), buat', + musicianWord: 'Musisi', + bandFooterB: 'di The Lab, lalu tautkan di bagian', + linkedLabWord: 'Profil Lab tertaut', + bandFooterC: 'di atas.', + bandMusicWord: 'Band & Musik', + bandName: 'Nama band', + bandNamePlaceholder: 'mis. The Bail Outs', + bandNudgeA: 'Kamu punya band — ketuk untuk menyetel', + crewTypeWord: 'Jenis Crew', + bandNudgeB: 'ke', + bandNudgeC: 'agar kamu juga muncul di scene Musik The Lab.', + beta: 'Beta', + bioLabel: 'Tentang / Manifesto', + bioPlaceholder: 'Siapa kamu, apa yang kamu skate, kisahmu...', + continue: 'Lanjutkan', + crewCreated: 'Crew dibuat!', + crewUpdated: 'Crew diperbarui!', + crewName: 'Nama Crew', + crewOnlyWord: 'Hanya crew', + crewType: 'Jenis Crew', + crewTypeDescA: 'Apakah crew-mu berfokus pada suatu keahlian? Pilih satu agar juga muncul di scene itu di', + theLab: 'The Lab', + crewTypeDescB: '. Crew skate biasa tetap', + mixedWord: 'Campuran', + crewTypeDescC: '.', + customVibeHint: 'Tambahkan vibe atau fokusmu sendiri dengan #', + customVibePlaceholder: 'mis. downhill, night-sessions, no-comply', + editDesc: 'Identitas crew-mu, home turf, dan anggota', + enableAgent: 'Aktifkan Agen Crew', + enableTreasury: 'Aktifkan Kas Crew', + failed: 'Gagal', + founded: 'Didirikan (Tahun)', + geolocationUnsupported: 'Geolokasi tidak didukung', + gettingLocation: 'Mengambil...', + goalHint: 'Pastikan profil Nostr-mu punya alamat Lightning (lud16) agar kontribusi bisa masuk.', + goalPlaceholder: 'mis. Cor spot DIY', + goalTarget: 'Target (sats)', + goalWhat: 'Apa tujuannya?', + homeSpots: 'Spot Rumah', + homeSpotsDesc: 'Tautkan spot yang sering dikunjungi crew-mu — mereka akan terhubung ke crew-mu di peta', + homeTurf: 'Home Turf (Kota / Area)', + homeTurfPlaceholder: 'Bristol, UK', + instagramDetected: 'Klip Instagram terdeteksi', + invalidMember: 'Masukkan npub, nprofile, atau pubkey hex yang valid.', + latitude: 'Lintang', + leaveBlankLocation: 'Biarkan kosong untuk mempertahankan lokasi home turf saat ini.', + links: 'Tautan', + locationError: 'Kesalahan lokasi', + locationFound: 'Lokasi ditemukan', + logoAlt: 'Crew', + logoHint: 'Logo membuat crew-mu langsung dikenali di peta dan di feed. Persegi paling bagus.', + logoLabel: 'Logo / Foto Crew', + logoUploaded: 'Logo diunggah', + longitude: 'Bujur', + looksGood: 'Terlihat bagus', + makeAdmin: 'Jadikan admin', + mapPin: 'Pin Peta', + mapPinHint: 'Taruh crew-mu di peta agar warga lokal bisa menemukanmu. Ketuk tombolnya — tanpa mengetik.', + memberAlreadyAdded: 'Anggota itu sudah ditambahkan.', + members: 'Anggota', + membersDesc: 'Tambahkan akun Nostr crew-mu. Setiap anggota mengonfirmasi dari kunci mereka sendiri — sampai saat itu mereka tampil sebagai “menunggu”.', + musicLink: 'Tautan musik', + nameCrew: 'Beri nama crew-mu', + nameCrewDesc: 'Crew butuh nama sebelum kamu lanjut.', + nameCrewFirst: 'Beri nama crew-mu dulu', + nameHint: 'Satu-satunya hal yang benar-benar kamu butuhkan. Bisa diubah nanti.', + namePlaceholder: 'mis. Backyard Bandits', + nameRequired: 'Nama wajib', + nameRequiredDesc: 'Beri nama crew-mu.', + nip05DescA: 'Handle yang dapat diverifikasi yang kamu kendalikan di domain apa pun, mis.', + nip05DescB: '. Ini diverifikasi terhadap kunci pendiri crew ini, dan kamu bisa menambahkan beberapa — masing-masing menampilkan centang hijau saat domainnya mengonfirmasi.', + nip05Label: 'NIP-05 Crew', + nip05Placeholder: 'crew@domainmu.com', + nip05Add: 'Tambah', + nip05Invalid: 'Masukkan handle seperti crew@domainmu.com', + nip05TooMany: 'Kamu bisa menambahkan hingga {{count}} handle.', + nip05Unverified: 'Belum diperiksa', + nip05Remove: 'Hapus {{handle}}', + notAKeyA: 'Itu tampaknya belum seperti kunci Nostr — tempel', + notAKeyB: ',', + notAKeyC: ', atau pubkey hex.', + onlyYouTubeInstagram: 'Hanya tautan YouTube dan Instagram yang didukung.', + openCall: 'Open Call', + openCallDescA: 'Mencari filmer, editor, atau darah baru? Kirim panggilan — ini tampil di halaman crew-mu agar orang yang cocok dari', + openCallDescB: 'bisa menghubungi.', + optional: '· opsional', + optionalParen: '(opsional)', + otherSocials: 'Media Sosial Lain', + otherSocialsDesc: 'Tambahkan sebanyak yang kamu suka — YouTube, TikTok, Discord, Telegram, dll.', + ownVisibility: 'visibilitas sendiri', + progress: 'Kemajuan', + publicWord: 'Publik', + publishedToScene: 'Dipublikasikan ke scene.', + publishFailed: 'Gagal mempublikasikan', + publishing: 'Mempublikasikan...', + ready: 'Siap', + readyToRollA: 'Siap jalan — tekan', + readyToRollB: 'kapan pun kamu mau.', + removeAdminRole: 'Hapus peran admin', + removeMember: 'Hapus anggota', + removeSocial: 'Hapus tautan sosial', + removeVibe: 'Hapus {{vibe}}', + roles: 'Peran:', + sasquatch: 'Sasquatch', + saveCrew: 'Simpan Crew', + skipToEnd: 'Lompat ke akhir', + socialPlaceholder: '@username atau tautan', + sponsorDesc: 'Jika toko lokal mendukung crew-mu, pilih mereka di sini untuk menampilkan banner "Disponsori oleh" yang menautkan ke toko mereka.', + stepAria: 'Langkah {{step}}: {{title}}', + stepBasics: 'Dasar-dasar', + stepBasicsShort: 'Dasar', + stepBasicsHint: 'Hanya yang penting — kamu bisa membuat crew hanya dengan langkah ini.', + stepVibe: 'Identitas & Vibe', + stepVibeShort: 'Vibe', + stepVibeHint: 'Bagaimana crew-mu tampil di seluruh aplikasi. Semua opsional.', + stepSquad: 'Skuad & Spot', + stepSquadShort: 'Skuad', + stepSquadHint: 'Tambahkan orang-orangmu dan home turf-mu. Kamu selalu bisa melakukannya nanti.', + stepExtras: 'Ekstra', + stepExtrasShort: 'Ekstra', + stepExtrasHint: 'Peningkatan untuk nanti — lewati apa pun yang kamu tidak yakin.', + extrasAllOptional: 'Semua di langkah ini opsional.', + groupIdentity: 'Identitas', + groupIdentityHint: 'Handle, tautan', + groupAi: 'Sasquatch AI', + groupShowcase: 'Showcase', + groupPayments: 'Pembayaran & kas', + groupIntegrations: 'Integrasi', + groupAdvanced: 'Lanjutan', + groupAdvancedHint: 'eksperimental', + pro: 'Pro', + agentProNote: 'Didukung Sasquatch. Pro mendapat model terbaik; tanpa Pro ia memakai fallback gratis.', + stepOf: 'Langkah {{step}} dari {{total}}', + treasuryDescA: 'Kumpulkan sats untuk tujuan bersama — memperbaiki spot DIY lokal, perjalanan crew, hadiah kontes. Ini tujuan Lightning yang transparan; Zap langsung', + treasuryDescStrong: 'ke dompetmu', + treasuryDescB: '(via alamat Lightning profilmu). SkateSpots tidak pernah menahan dana.', + upload: 'Unggah', + uploadFailed: 'Gagal mengunggah', + useCurrentLocation: 'Gunakan lokasi saat ini', + vibeLabel: 'Vibe / Fokus', + videoDescA: 'Part penuh, montase, atau klip terbaru crew-mu. Tempel tautan', + videoDescB: '— ini akan diputar langsung di halaman crew-mu.', + visibilityDescA: 'Setiap anggota mengontrol', + visibilityDescB: 'mereka — saat mereka mengonfirmasi dari kunci mereka, mereka bisa memilih', + visibilityDescC: '— disembunyikan dari orang luar). Kamu tidak bisa mengaturnya untuk mereka; itu keputusan mereka.', + website: 'Situs Web', + yourRoles: 'Peranmu (Team Leader)', + youtubeDetected: 'Video YouTube terdeteksi', + invalidUrl: 'Masukkan tautan yang valid (mis. https://example.com).', + }, + groupConversation: { + seoTitle: 'Chat grup - SkateSpots', + invalidLink: 'Tautan chat grup ini tidak valid.', + loginTitle: 'Masuk untuk melihat grup ini', + secureSignerTitle: 'Perlu penandatangan aman', + secureSignerDesc: 'Pesan grup memerlukan penandatangan yang mendukung NIP-44.', + encryptedGroup: 'Grup terenkripsi ujung-ke-ujung', + empty: 'Belum ada pesan — sapa grupnya.', + placeholder: 'Kirim pesan ke grup...', + }, + hero: { + established: 'Berdiri {{year}}', + teamLeader: 'Team Leader: {{name}}', + ledBy: 'Dipimpin oleh', + }, + inviteCard: { + acceptedTitle: 'Undangan diterima 🛹', + acceptedDesc: 'Pendiri crew mengonfirmasi anggota di {{crew}}. Kamu akan muncul di roster setelah mereka menyetujui.', + couldNotAccept: 'Tidak dapat menerima', + couldNotDecline: 'Tidak dapat menolak', + acceptedDone: 'Diterima —', + confirmsMembers: 'mengonfirmasi anggota', + declinedDone: 'Menolak undangan ke {{crew}}', + invitedYou: 'mengundangmu untuk bergabung', + admin: 'Admin', + accept: 'Terima', + decline: 'Tolak', + }, + inviteDialog: { + messageIntro: 'Yo — gabung crew {{crew}} di SkateSpots 🛹', + messageBody: 'Masuk dengan kunci Nostr-mu, lalu minta bergabung dari halaman crew.', + copyFailed: 'Gagal menyalin', + shareTitle: 'Gabung {{crew}}', + sentTitle: 'Undangan terkirim! 🛹', + sentDesc: 'Mereka akan mendapat notifikasi untuk menerima atau menolak.', + couldNotSend: 'Tidak dapat mengirim undangan', + trigger: 'Undang', + title: 'Undang ke {{crew}}', + description: 'Kirim undangan ke kunci Nostr seseorang, atau bagikan tautan.', + sendTab: 'Kirim undangan', + shareTab: 'Bagikan tautan', + npubLabel: 'npub Skater', + invalidNpub: 'Itu tampaknya bukan npub yang valid.', + noteLabel: 'Catatan', + optional: '(opsional)', + notePlaceholder: 'Ayo skate bersama kami…', + inviteAsAdmin: 'Undang sebagai admin', + inviteAsAdminDesc: 'Bisa mengelola crew & mengundang orang lain.', + sendButton: 'Kirim undangan', + sendFooter: 'Mereka akan mendapat notifikasi untuk menerima atau menolak. Keanggotaan baru dihitung setelah mereka menerima.', + inviteLink: 'Tautan undangan', + messageLabel: 'Pesan', + copyMessage: 'Salin pesan', + founderHint: 'Sebagai pendiri kamu juga bisa menambahkan kunci anggota langsung, lalu mereka mengonfirmasi.', + addMemberSettings: 'Tambah anggota di pengaturan crew', + }, + joinRequest: { + moreCount: '+{{count}} lagi', + addedTitle: 'Menambahkan {{name}} ke {{crew}} 🛹', + addedDesc: 'Mereka akan mengonfirmasi dari sisi mereka untuk tampil sebagai anggota.', + vouchedTitle: 'Kamu menjamin {{name}} 🤝', + vouchedDesc: 'Pendiri {{crew}} akan melihat dukunganmu dan bisa menambahkan mereka.', + couldNotEndorse: 'Tidak dapat mendukung', + endorsedDoneA: 'Kamu menjamin', + endorsedDoneB: '— pendiri akan mengonfirmasi', + vouchedBy: 'Dijamin oleh', + approveAndAdd: 'Setujui & tambahkan', + addToCrew: 'Tambahkan ke crew', + vouchedWaiting: 'Dijamin — menunggu pendiri', + vouchForThem: 'Jamin mereka', + leadershipOnly: 'Hanya pimpinan crew.', + adminHelp: 'Admin tidak bisa menambahkan anggota langsung — menjamin memberi tahu pendiri bahwa kamu mendukung rider ini.', + }, + leadership: { + teamLeader: 'Team Leader', + captain: 'Kapten', + verifiedMember: 'Anggota terverifikasi', + messageName: 'Kirim pesan ke {{name}}', + title: 'Kepemimpinan', + captainsOne: '{{count}} Kapten', + captainsMany: '{{count}} Kapten', + footer: 'Team Leader menjalankan roster; Kapten membantu mengundang, menyelenggarakan jam, dan menjaga crew tetap rapi.', + }, + linkField: { + title: 'Crew Tertaut', + description: 'Menjalankan crew juga? Tautkan agar orang bisa melompat antara studiomu dan crew-mu. Opsional. Tautkan crew ini kembali ke profil dari editor crew dan ini akan menampilkan', + descriptionRest: 'lencana hijau di keduanya.', + none: 'Kamu belum punya crew. Buat satu di halaman Crew untuk menautkannya di sini.', + linkedCrew: 'Crew tertaut ({{id}})', + }, + lookingFor: { + title: 'Open Call', + subtitle: 'Crew ini sedang mencari:', + }, + memberVisibility: { + updatedTitle: 'Visibilitas diperbarui', + updatedCrew: 'Kamu sekarang hanya terlihat oleh rekan crew.', + updatedPublic: 'Kamu sekarang terlihat publik di crew ini.', + couldNotUpdate: 'Tidak dapat memperbarui', + title: 'Visibilitas kamu di crew ini', + save: 'Simpan visibilitas', + }, + newMessage: { + inCrew: 'Di crew-mu: {{crews}}', + crewmate: 'Rekan crew', + following: 'Mengikuti', + invalidKey: 'Itu tampaknya bukan npub atau public key yang valid.', + description: 'Cari orang-orangmu berdasarkan nama, atau tempel npub untuk mengirim pesan kepada siapa pun. Pilih dua atau lebih untuk memulai grup.', + searchPlaceholder: 'Cari nama atau tempel npub1...', + messageThisKey: 'Kirimi kunci ini pesan', + loadingPeople: 'Memuat orang-orangmu...', + noPeople: 'Belum ada rekan crew atau yang diikuti.', + noPeopleHint: 'Tempel npub seseorang di atas untuk memulai percakapan.', + yourCrews: 'Crew-mu', + selected: '{{count}} dipilih', + startGroup: 'Mulai grup ({{count}})', + message: 'Pesan', + }, + nip05: { + mismatch: 'Domain ini mengarahkan handle ke kunci Nostr yang berbeda dari pendiri crew. Tidak terverifikasi.', + verified: 'Terverifikasi — domain mengonfirmasi handle ini milik kunci pendiri crew.', + }, + requestCollective: { + sentTitle: 'Permintaan terkirim 🤝', + sentDesc: '{{name}} akan melihatnya di notifikasi mereka dan bisa menambahkanmu.', + couldNotSend: 'Tidak dapat mengirim permintaan', + title: 'Gabung kolektif ini', + waiting: 'Permintaan terkirim — menunggu {{name}}.', + askA: 'Minta crew di balik', + askB: 'untuk menambahkanmu ke roster. Mereka akan mendapat notifikasi dan bisa menambahkanmu dengan satu ketukan.', + placeholder: 'Opsional: katakan mengapa kamu cocok…', + sendButton: 'Kirim permintaan', + }, + requestToJoin: { + sentTitle: 'Permintaan terkirim! 🛹', + sentDesc: 'Pimpinan {{crew}} akan melihatnya di notifikasi mereka.', + couldNotSend: 'Tidak dapat mengirim permintaan', + trigger: 'Minta bergabung', + title: 'Gabung {{crew}}', + description: 'Memberi tahu pendiri & admin crew agar mereka bisa menambahkanmu.', + placeholder: 'Sapa — di mana kamu skate, siapa yang kamu kenal, mengapa kamu ingin masuk…', + sending: 'Mengirim…', + sendButton: 'Kirim permintaan bergabung', + }, + sponsorBanner: { + loading: 'Memuat sponsor…', + sponsoredBy: 'Disponsori oleh', + }, + sponsorPicker: { + selected: 'Sponsor dipilih', + setLoading: 'Sponsor disetel (toko memuat…)', + set: 'Sponsor disetel', + clearAria: 'Hapus sponsor', + searchPlaceholder: 'Cari toko skate berdasarkan nama atau kota…', + loading: 'Memuat toko…', + noMatch: 'Tidak ada toko yang cocok — coba pencarian lain.', + none: 'Belum ada toko yang ditemukan.', + }, + treasury: { + title: 'Kas Crew', + ofGoal: 'dari tujuan {{target}}', + goalReached: 'Tujuan tercapai!', + funded: '{{percent}}% terdanai', + contributionOne: '{{count}} kontribusi', + contributionMany: '{{count}} kontribusi', + daysLeft: 'tersisa {{days}}h', + closed: 'ditutup', + nonCustodial: 'Non-kustodial · Zap langsung ke dompet Lightning crew', + }, + userStatus: { + atSpot: '📍 Di sebuah spot', + autoClears: '⏱️ Otomatis hilang dalam {{min}} mnt', + }, + video: { + title: 'The Part', + fullVideo: 'Video penuh · montase', + latestClip: 'Klip terbaru', + watch: 'Tonton', + iframeTitle: '{{crew}} — video', + playAria: 'Putar video {{crew}}', + thumbAlt: 'Thumbnail video {{crew}}', + instagramTitle: 'Klip Instagram', + }, + vouch: { + removedTitle: 'Jaminan dihapus', + vouchedTitle: 'Dijamin!', + removedDesc: 'Kamu tidak lagi menjamin {{name}}.', + vouchedDesc: 'Kamu menjamin {{name}}. Scene memercayai anggotanya sendiri.', + couldNotVouch: 'Tidak dapat menjamin', + title: 'Jaminan Scene', + sceneVerified: 'Terverifikasi scene', + vouched: 'Dijamin', + newUnvouched: 'Baru · belum dijamin', + checking: 'Memeriksa scene…', + empty: 'Belum ada jaminan. Jaminan dari skater di lingkaramu adalah sinyal terbaik bahwa seseorang asli — bukan orang acak yang kebetulan lewat.', + countOne: '{{count}} jaminan', + countMany: '{{count}} jaminan', + trusted: '{{count}} dari skater di web kepercayaanmu', + remove: 'Hapus jaminan', + vouchFor: 'Jamin {{name}}', + ownerNote: 'Skater yang mengenal karyamu bisa menjaminmu di sini.', + }, + }, +}; export default idBatch5; diff --git a/src/i18n/id/batch6.ts b/src/i18n/id/batch6.ts index 6db573a..93a945c 100644 --- a/src/i18n/id/batch6.ts +++ b/src/i18n/id/batch6.ts @@ -1,4 +1,1947 @@ -/** id — batch 6. Filled by the translation pass; empty until then. */ -const idBatch6 = {}; +const idBatch6 = { + placesUi: { + addToCalendar: { + add: "Tambahkan ke Kalender", + appleOutlook: "Apple / Outlook (.ics)", + google: "Google Calendar", + }, + attendees: { + goingCount: "hadir", + goingTab: "Hadir ({{count}})", + interestedTab: "Tertarik ({{count}})", + nobodyGoing: "Belum ada yang mengonfirmasi.", + nobodyInterested: "Belum ada yang menandai tertarik.", + noRsvps: "Belum ada RSVP — jadilah yang pertama mengatakan kamu hadir.", + trusted: "Terpercaya", + trustedTitle: "Seseorang yang kamu ikuti atau pemeta terpercaya", + youTrust: "yang kamu percaya", + }, + bounty: { + addressCoords: "Alamat & koordinat", + basic: "Dasar", + contactInfo: "Info kontak", + description: "Deskripsi", + earningPotential: "Potensi Penghasilan", + excellent: "Luar biasa!", + gettingStarted: "Memulai", + good: "Bagus", + onePhoto: "Minimal 1 foto", + openingHours: "Jam buka", + shopName: "Nama shop", + threePhotos: "3+ foto", + tip: "💡 Kualitas lebih tinggi = lebih banyak zap dari komunitas!", + }, + calendar: { + allDay: "Sepanjang hari", + eventDay: "Hari event", + eventsOnDay: "{{count}} event", + eventsThisMonth: "event bulan ini", + going: "hadir", + months: { + january: "Januari", + february: "Februari", + march: "Maret", + april: "April", + may: "Mei", + june: "Juni", + july: "Juli", + august: "Agustus", + september: "September", + october: "Oktober", + november: "November", + december: "Desember", + }, + nextMonth: "Bulan berikutnya", + nothingOnDay: "Tidak ada apa-apa hari ini.", + prevMonth: "Bulan sebelumnya", + tapHighlighted: "Ketuk hari yang disorot untuk melihat acaranya.", + today: "Hari ini", + tourDay: "Hari Tour", + toursOnDay: "{{count}} tour", + toursThisMonth: "tour bulan ini", + weekdays: { + sun: "Min", + mon: "Sen", + tue: "Sel", + wed: "Rab", + thu: "Kam", + fri: "Jum", + sat: "Sab", + }, + weekdaysShort: { + sun: "M", + mon: "S", + tue: "S", + wed: "R", + thu: "K", + fri: "J", + sat: "S", + }, + }, + countdown: { + ended: "Berakhir", + happeningNow: "Sedang berlangsung", + inDays: "Dalam {{count}} hari", + inHoursMins: "Dalam {{hours}}j {{mins}}m", + inMins: "Dalam {{count}} menit", + startingNow: "Mulai sekarang", + tomorrow: "Besok", + }, + createEvent: { + add: "Tambah", + addNewSpot: "Tambah spot baru →", + changeSpot: "Ganti Spot", + created: "Event dibuat!", + createdDesc: "Event kamu telah dipublikasikan ke jaringan.", + entryFee: "Biaya Masuk", + entryFeeHint: "(opsional — mis. \"500 sats\" atau \"Rp50.000\")", + entryFeePlaceholder: "Biarkan kosong untuk event gratis", + featuring: "Menampilkan {{name}}", + featuringDesc: "Aksi ini akan ditandai sebagai musik live dan muncul di daftar gig mereka.", + fundingGoal: "Target Pendanaan", + fundingGoalHint: "(opsional — sats untuk urun dana via zap)", + fundingGoalPlaceholder: "mis. 50000", + geoNotSupported: "Geolokasi tidak didukung", + geoNotSupportedDesc: "Browser kamu tidak mendukung geolokasi.", + hideSpots: "Sembunyikan Spot", + hostingAs: "Menyelenggarakan sebagai {{name}}", + hostingAsDesc: "Event ini akan tampil di halaman crew kamu dan ditandai sebagai yang diselenggarakan crew.", + imageUploaded: "Gambar diunggah", + imageUploadedDesc: "Gambar kamu berhasil diunggah.", + invalidDate: "Tanggal tidak valid", + invalidDateDesc: "Masukkan tanggal dan waktu mulai yang valid.", + invalidEnd: "Waktu berakhir tidak valid", + invalidEndDesc: "Waktu berakhir harus setelah waktu mulai.", + linkedTo: "Tertaut ke: {{title}}", + linkToSpot: "Tautkan ke Skate Spot", + linkToShop: "Tautkan ke Shop", + selectedShop: "Tertaut ke {{name}}", + selectShopHint: "Opsional — diadakan atau diselenggarakan oleh skate shop.", + selectShop: "Pilih shop", + changeShop: "Ganti shop", + hideShops: "Sembunyikan shop", + searchShops: "Cari shop…", + noShopsMatch: "Tidak ada shop yang cocok dengan pencarianmu.", + noShopsAvailable: "Belum ada shop tersedia.", + linkToTour: "Tautkan ke Tour (Opsional)", + linkTourDesc: "Tautkan event ini ke sebuah tour untuk menunjukkan bahwa ini bagian dari rangkaian yang lebih besar. Cocok untuk tour nasional, petualangan internasional, atau hari tantangan World Destruction Tour.", + loadingSpots: "Memuat spot...", + loadingTours: "Memuat tour...", + locationError: "Kesalahan lokasi", + locationFound: "Lokasi ditemukan", + locationFoundDesc: "Lokasi kamu saat ini telah disetel.", + logoUrl: "URL Logo (opsional)", + noSpotsAvailable: "Tidak ada spot tersedia", + noSpotsMatch: "Tidak ada spot yang cocok dengan pencarianmu", + noTourLinked: "Tidak ada tour tertaut", + optional: "(opsional)", + pastDesc: "Pilih tanggal dan waktu di masa depan agar skater bisa RSVP dan hadir.", + pastTitle: "Waktu mulai itu sudah lewat", + publishFailed: "Gagal mempublikasikan", + publishFeatured: "Publikasikan Event Unggulan", + removeSponsor: "Hapus sponsor", + searchSpots: "Cari spot berdasarkan nama, lokasi, atau kategori...", + selectedSpot: "Dipilih: {{name}}", + selectSpot: "Pilih Spot", + selectSpotHint: "Pilih spot dari peta tempat event ini berlangsung", + selectTour: "Pilih Tour", + somethingWrong: "Terjadi kesalahan", + sponsorName: "Nama sponsor", + sponsors: "Sponsor", + sponsorsHint: "Ada shop atau brand yang mendukung ini? Tambahkan logo mereka — akan tampil sebagai strip \"Presented by\" di event.", + startRequired: "Waktu mulai wajib diisi", + startRequiredDesc: "Masukkan kapan event dimulai.", + titleRequired: "Judul wajib diisi", + titleRequiredDesc: "Masukkan nama untuk event ini.", + uploadFailed: "Unggahan gagal", + uploadFailedDesc: "Gagal mengunggah gambar", + websiteUrl: "URL Situs Web (opsional)", + }, + createShop: { + address: "Alamat Shop", + addressPlaceholder: "mis., 411 N Fairfax Ave, Los Angeles, CA 90036", + addressRequired: "Alamat wajib diisi", + addressRequiredDesc: "Masukkan alamat shop kamu.", + contactHint: "Bantu pelanggan menghubungimu (disarankan minimal satu metode kontak)", + contactInfo: "Informasi Kontak", + created: "🎉 Shop ditambahkan!", + createdDesc: "Skate shop kamu kini ada di peta. Skater bisa zap kamu sebagai ucapan terima kasih!", + descriptionPlaceholder: "Ceritakan tentang shop kamu, apa yang kamu jual, spesialisasimu...", + detailsDesc: "Ceritakan kepada komunitas tentang shop kamu. Semua kolom bertanda * wajib diisi.", + email: "Email", + hoursOfOperation: "Jam Operasional", + hoursPlaceholder: "mis., Sen-Sab 10.00-20.00, Min 12.00-18.00", + instagram: "Instagram", + invalidCoords: "Koordinat tidak valid", + invalidCoordsDesc: "Masukkan lintang (-90 hingga 90) dan bujur (-180 hingga 180) yang valid.", + latPlaceholder: "Lintang (mis., 34.0737)", + lngPlaceholder: "Bujur (mis., -118.3614)", + locationRequired: "Lokasi wajib diisi", + locationRequiredDesc: "Masukkan koordinat atau gunakan lokasi kamu saat ini.", + loginToAdd: "Kamu perlu masuk untuk menambahkan skate shop.", + namePlaceholder: "mis., Supreme Los Angeles", + nameRequired: "Nama shop wajib diisi", + nameRequiredDesc: "Masukkan nama untuk shop kamu.", + phoneNumber: "Nomor Telepon", + publishFailedDesc: "Terjadi kesalahan. Periksa konsol untuk detailnya.", + shopPhotoAlt: "Shop", + shopPhotos: "Foto Shop", + subtitle: "Daftarkan shop kamu di peta dan terhubung dengan komunitas", + upload: "Unggah", + }, + createTour: { + acceptedClipSources: "Sumber Klip yang Diterima", + acceptedClipSourcesDesc: "Format apa saja yang akan kamu terima untuk pengiriman klip?", + accommodationInfo: "Info Akomodasi", + accommodationPlaceholder: "Rekomendasi atau pengaturan akomodasi, mis. 'Hostel murah di sepanjang rute', 'Perlu perlengkapan berkemah', 'Airbnb sudah termasuk'", + addChallenge: "Tambah Tantangan", + addCity: "Tambah kota...", + addCountry: "Tambah negara...", + addShopFirst: "Tambah shop dulu", + alsoSelected: "Juga dipilih:", + availabilityPlaceholder: "mis., Akhir pekan, Hanya pagi, Dengan perjanjian", + availabilityQuestion: "Kapan kamu biasanya tersedia?", + availableShops: "Skate Shop Tersedia ({{count}})", + challengeDescPlaceholder: "Deskripsi opsional...", + challenges: "Tantangan", + challengesRequired: "Tantangan wajib diisi", + challengesRequiredDesc: "Tambahkan minimal satu tantangan untuk diselesaikan tim.", + challengesSecret: "Semua tantangan adalah RAHASIA hingga tanggal mulai kompetisi. Tim tidak akan melihatnya sampai saat itu!", + challengeTitlePlaceholder: "Judul tantangan, mis. 'Kickflip dari 10 anak tangga'", + citiesLabel: "Kota", + citiesOnTour: "Kota dalam Tour", + cityPlaceholder: "mis., Berlin, Jerman", + cityRegion: "Kota / Wilayah", + cityRequired: "Kota/wilayah wajib diisi", + cityRequiredDesc: "Masukkan kota atau wilayahmu.", + clipAnyUrl: "🔗 URL Apa Saja", + clipBlossom: "📦 Unggahan Blossom", + clipInstagram: "📸 Instagram", + clipYouTube: "▶️ YouTube", + competitionDates: "Tanggal Kompetisi", + competitionDatesWarning: "⚠️ Semua tantangan adalah RAHASIA hingga tanggal mulai! Tim tidak akan melihat tantangan sampai kompetisi dimulai.", + competitionLocations: "Lokasi Kompetisi", + competitionLocationsDesc: "Di mana tim akan berlomba? Tambahkan semua kota dan negara yang terlibat.", + coordsHint: "Koordinat bersifat opsional. Tambahkan untuk menandai titik pertemuanmu di peta.", + countriesLabel: "Negara", + countriesRequired: "Negara wajib diisi", + countriesRequiredDesc: "Tambahkan minimal satu negara untuk tour internasionalmu.", + createdDestruction: "💀 WORLD DESTRUCTION TOUR DIBUAT!", + createdDestructionDesc: "Tim bisa mendaftar. Tantangan diungkap pada tanggal mulai!", + createDestructionTour: "Buat World Destruction Tour", + createdInternational: "✈️ Tour Internasional Dibuat!", + createdInternationalDesc: "Petualangan globalmu sudah terdaftar! Terhubung dengan skater di seluruh dunia.", + createdLocal: "🏠 Tour Lokal Dibuat!", + createdLocalDesc: "Tour kamu kini terlihat. Skater bisa memesan via DM!", + createdNational: "🚐 Tour Nasional Dibuat!", + createdNationalDesc: "Road trip kamu sudah aktif! Mulai berkoordinasi dengan skater yang tertarik.", + departure: "Keberangkatan *", + departureRequired: "Tanggal keberangkatan wajib diisi", + departureRequiredDesc: "Tetapkan kapan perjalanan berangkat agar skater bisa merencanakan dan memesan.", + descriptionPlaceholder: "Jelaskan apa yang akan dialami skater: spot yang akan dikunjungi, suasana, apa yang membuat tour kamu unik...", + destructionDesc: "Siapkan kompetisi global bergaya KOTR — kamu menentukan SEMUANYA!", + discountHint: "Peserta tour dapat menunjukkan konfirmasi pemesanan di shop untuk mendapatkan diskon ini", + discountPercentage: "Persentase Diskon", + dropTour: "Pasang Tour", + duration: "Durasi", + durationHintDestruction: "Berapa lama kompetisinya? (1-12 bulan)", + durationHintInternational: "Berapa minggu petualangannya? (sampai 2 bulan)", + durationHintLocal: "Berapa lama tour biasanya?", + durationHintNational: "Berapa hari road trip-nya?", + durationWeeksMonths: "{{weeks}} minggu (~{{months}} bulan)", + editTour: "Edit Tour", + enable: "Aktifkan", + enabled: "Aktif", + endBeforeStart: "Berakhir sebelum mulai", + endBeforeStartDesc: "Tanggal berakhir kompetisi harus pada atau setelah tanggal mulai.", + endDate: "Tanggal Berakhir", + entryFeeHint: "Kamu menyimpan 95% • Platform mengambil 5% • Biarkan kosong untuk masuk gratis", + entryFeePerTeam: "Biaya Masuk per Tim (sats)", + entryFeePlaceholder: "mis., 100000", + entryPrizes: "Masuk & Hadiah", + filmPremieres: "Premiere Film Tim", + filmPremieresDesc: "Setelah kompetisi, klip setiap tim menjadi film penuh yang bisa dipremierekan di skate shop lokal di seluruh dunia.", + filmPremieresInfo: "🎥 Tim menyusun klip tantangan mereka menjadi film akhir. Shop dapat menggelar acara premiere, menghubungkan kompetisi global dengan komunitas lokal.", + filmReleaseDate: "Tanggal Rilis Film (Opsional)", + filmReleaseDateHint: "Kapan film akan tersedia. Biarkan kosong untuk merilis tepat setelah kompetisi berakhir.", + fixedSession: "Sesi tetap", + fixedSessionDesc: "Tanggal & waktu yang ditetapkan", + flexible: "Fleksibel", + flexibleDesc: "Pesan kapan saja via DM", + hide: "Sembunyikan", + howDestruction1: "• Kompetisi tim global - hingga 12 bulan", + howDestruction2: "• KAMU menentukan tantangan, poin, hadiah - kami hanya menyediakan platformnya", + howDestruction3: "• Semua tantangan adalah RAHASIA hingga tanggal mulai kompetisi", + howDestruction4: "• Klip via unggahan Blossom ATAU tautan eksternal (YouTube, Instagram, URL apa saja)", + howDestruction5: "• Hanya tingkat lanjutan - semua jenis spot disertakan otomatis", + howDestruction6: "• Platform hanya mengambil 5% dari biaya masuk (BUKAN dari kumpulan hadiah)", + howDestructionTitle: "💀 WORLD DESTRUCTION TOUR - Gaya KOTR", + howInternational1: "• Petualangan lintas batas di berbagai negara", + howInternational2: "• Kamu menetapkan harganya — platform hanya mengambil 5%", + howInternational3: "• Tetapkan tanggal keberangkatan & kepulangan agar crew bisa memesan penerbangan", + howInternational4: "• Hubungkan skater dari seluruh dunia", + howInternational5: "• Ciptakan pengalaman global yang tak terlupakan!", + howInternationalTitle: "Cara Kerja Tour Internasional", + howItWorks: "Cara kerjanya:", + howLocal1: "• Kamu menetapkan harganya — platform mengambil 10%", + howLocal2: "• Spot tersembunyi tetap tersembunyi — kamu menunjukkannya langsung", + howLocal3: "• Jalankan sesi terjadwal atau tetap fleksibel / dengan perjanjian", + howLocal4: "• Skater memesan via DM, membayar dengan Lightning & bisa menambahkannya ke kalender mereka", + howLocal5: "• Bangun reputasimu dengan ulasan dan zap", + howLocalTitle: "Cara Kerja Tour Lokal", + howNational1: "• Road trip multi-kota di seluruh negaramu", + howNational2: "• Kamu menetapkan harganya — platform hanya mengambil 7%", + howNational3: "• Tetapkan tanggal perjalanan agar skater bisa mengatur cuti & perjalanan", + howNational4: "• Sertakan info transportasi / akomodasi untuk crew", + howNational5: "• Bangun petualangan skate yang legendaris!", + howNationalTitle: "Cara Kerja Tour Nasional", + imageUploadedDesc: "Gambar tour kamu telah diunggah.", + incompleteCoords: "Koordinat tidak lengkap", + incompleteCoordsDesc: "Masukkan lintang dan bujur keduanya, atau biarkan keduanya kosong.", + internationalDetails: "Detail Petualangan Internasional", + languagesSelected: "{{count}} dipilih", + languagesSpoken: "Bahasa yang Dikuasai", + latOptional: "Lintang (opsional)", + lngOptional: "Bujur (opsional)", + loadingProfile: "Memuat Profil...", + loadingProfileDesc: "Memeriksa status verifikasi NIP-05 kamu.", + loadingShops: "Memuat shop...", + localShopPremieres: "Premiere Shop Lokal", + localShopPremieresDesc: "Skate shop di seluruh dunia dapat menggelar malam film", + loginToCreate: "Kamu perlu masuk untuk membuat tour.", + maxGroupSize: "Ukuran Grup Maksimal", + maxTeams: "Tim Maksimal", + maxTeamSize: "Ukuran Tim Maksimal", + meetingLocationSet: "Lokasi kamu saat ini telah disetel sebagai titik pertemuan.", + meetingPointDesc: "Di mana kamu akan bertemu peserta tour? Pilih tempat umum yang dikenal baik.", + meetingPointLabel: "Titik Pertemuan", + meetingPointPlaceholder: "mis., Stasiun Warschauer Straße", + meetingPointRequired: "Titik pertemuan wajib diisi", + meetingPointRequiredDesc: "Masukkan di mana kamu akan bertemu peserta tour.", + minTeamSize: "Ukuran Tim Minimal", + noChallenges: "Belum ada tantangan", + noChallengesDesc: "Tambahkan tantangan untuk diselesaikan tim", + noPartnerShop: "Tidak ada shop mitra", + noShopsFound: "Belum ada skate shop yang ditemukan di jaringan.", + noShopsRegistered: "Belum ada skate shop terdaftar", + onlineRelease: "Rilis Online", + onlineReleaseDesc: "Juga rilis film di YouTube/Nostr", + organizerContact: "Detail Kontak Penyelenggara", + organizerContactHint: "Ini akan terlihat oleh tim yang terdaftar", + organizerContactPlaceholder: "Bagaimana tim bisa menghubungimu? mis., Nostr npub, email, Telegram, dll.", + partnerDiscountDesc: "Tawarkan diskon kepada peserta tour di skate shop lokal", + partnerStep1: "1. Bermitra dengan skate shop lokal yang kamu percaya", + partnerStep2: "2. Tetapkan persentase diskon untuk peserta tour", + partnerStep3: "3. Setelah tour, beri peserta konfirmasi untuk ditunjukkan di shop", + partnerStep4: "4. Shop menghormati diskon - membangun komunitas & mendatangkan pelanggan!", + percentOff: "DISKON {{percent}}%", + photoHint: "Tambahkan foto dirimu sedang skate atau spot keren dari tour kamu.", + pickRide: "Pilih kendaraanmu", + place1: "🥇 Juara 1", + place2: "🥈 Juara 2", + place3: "🥉 Juara 3", + platformFee: "Kamu menetapkan harga • Platform mengambil {{percent}}", + points: "Poin:", + pricePerPerson: "Harga per Orang (sats)", + pricePlaceholder: "mis., 25000", + prizeDistribution: "Distribusi Hadiah", + prizePoolHint: "Opsional - total hadiah yang tersedia", + prizePoolPlaceholder: "mis., 2000000", + proTipDesc: "Sebelum mendaftarkan diskon mitra, hubungi pemilik shop via DM untuk menyepakati persentase diskon. Ini memastikan mereka setuju dan akan menghormati diskon untuk peserta tour kamu.", + proTipTitle: "💡 Tips Pro: Koordinasi dengan shop dulu!", + return: "Kepulangan", + returnBeforeDeparture: "Pulang sebelum berangkat", + returnBeforeDepartureDesc: "Tanggal kepulangan harus pada atau setelah tanggal keberangkatan.", + roadTripDetails: "Detail Road Trip", + schedule: "Jadwal", + scheduleDesc: "Jalankan ini sebagai sesi terjadwal sekali saja, atau tetap fleksibel dan biarkan skater memesan waktu via DM.", + secretUntilStart: "Rahasia hingga mulai", + selectPartnerShop: "Pilih Shop Mitra", + sessionDateRequired: "Tanggal sesi wajib diisi", + sessionDateRequiredDesc: "Pilih tanggal dan waktu untuk sesi terjadwalmu, atau beralih ke jadwal fleksibel.", + sessionDateTime: "Tanggal & waktu sesi", + sessionDateTimeHint: "Skater akan melihat waktu ini dan bisa menambahkannya ke kalender mereka dari halaman tour.", + shopPremieresContact: "Hubungi shop ini langsung untuk mengatur malam premiere film. Semua pengaturan bersifat privat.", + shopPremieresHow: "💡 Cara Kerja Premiere Shop: Hubungi shop langsung untuk mengatur malam premiere. Semua pengaturan bersifat privat antara kamu dan shop.", + shopsCanRegister: "Shop dapat mendaftar di /create-shop", + show: "Tampilkan", + showAllLanguages: "Tampilkan semua {{count}} bahasa", + somethingWrong: "Terjadi kesalahan.", + spotTypes: "Jenis Spot", + spotTypesRequired: "Jenis spot wajib diisi", + spotTypesRequiredDesc: "Pilih minimal satu jenis spot yang akan kamu tunjukkan.", + startDate: "Tanggal Mulai", + startDateRequired: "Tanggal mulai wajib diisi", + startDateRequiredDesc: "Tetapkan kapan kompetisi dimulai (tantangan akan diungkap pada tanggal ini).", + startingCity: "Kota Awal", + startingCityPlaceholder: "mis., Los Angeles, USA", + teamSettings: "Pengaturan Tim", + teamsCount: "{{count}} tim", + titlePlaceholder: "mis., Berlin Kreuzberg - Tour Spot Underground", + titleRequired: "Judul tour wajib diisi", + titleRequiredDesc: "Masukkan nama untuk tour kamu.", + totalPercent: "Total: {{percent}}%", + totalPrizePool: "Total Kumpulan Hadiah (sats)", + tourDesc: "Ceritakan kepada skater apa yang bisa mereka harapkan di tour kamu", + tourDetails: "Detail Tour", + tourPhoto: "Foto Tour", + tourTitle: "Judul Tour", + transportDestructionPlaceholder: "Bagaimana tim akan berpindah antar lokasi? Ada transportasi yang disediakan atau direkomendasikan?", + transportInfo: "Info Transportasi", + transportPlaceholder: "Bagaimana peserta akan bepergian? mis., 'Van disediakan', 'Terbang ke Barcelona, kami menyewa van', 'Kereta antar kota'", + tripDatesDesc: "Kunci tanggalnya agar skater bisa mengajukan cuti, memesan penerbangan, dan merencanakan perjalanan.", + tripDatesTitle: "Tanggal Perjalanan", + updated: "Tour diperbarui!", + updatedDesc: "Perubahanmu telah dipublikasikan.", + upload: "Unggah", + view: "Lihat →", + worldDestruction: "World Destruction Tour", + youReceive: "Kamu menerima: {{amount}} sats per orang", + }, + editEvent: { + accessDenied: "Akses Ditolak", + accessDeniedDesc: "Kamu hanya dapat mengedit event yang kamu buat.", + backToEvent: "Kembali ke Event", + detailsDesc: "Perbarui informasi tentang event ini. Semua kolom bertanda * wajib diisi.", + eventCover: "Sampul event", + locationUpdated: "Lokasi diperbarui.", + loginToEdit: "Kamu perlu masuk untuk mengedit event ini.", + newSpot: "Spot baru: {{location}}.", + newTime: "Waktu baru: {{date}} pukul {{time}}.", + saveChanges: "Simpan Perubahan", + saving: "Menyimpan...", + title: "Edit Event", + updated: "Event diperbarui!", + updatedDesc: "Perubahanmu telah dipublikasikan ke jaringan.", + updateDetails: "Perbarui detail untuk {{title}}", + updatedNotified: "Perubahan dipublikasikan — {{count}} peserta diberi tahu.", + updateFailed: "Gagal memperbarui", + updateMessage: "{{parts}} — lihat event untuk detailnya.", + }, + editShop: { + accessDeniedDesc: "Kamu hanya dapat mengedit shop yang kamu buat.", + backToShop: "Kembali ke Shop", + detailsDesc: "Perbarui informasi shop kamu. Semua kolom bertanda * wajib diisi.", + loginToEdit: "Kamu perlu masuk untuk mengedit shop ini.", + updated: "Shop diperbarui!", + updateDetails: "Perbarui detail untuk {{name}}", + }, + editTour: { + accessDeniedDesc: "Kamu hanya dapat mengedit tour yang kamu buat.", + loginToEdit: "Kamu perlu masuk untuk mengedit tour ini.", + }, + eventCard: { + report: "Laporkan", + }, + eventDetail: { + aCrew: "sebuah crew", + addToCalendar: "Tambahkan ke kalender", + backToEvents: "Kembali ke Event", + cancelled: "Event ini dibatalkan", + checkUpdate: "— cek pembaruannya", + copyFailed: "Gagal menyalin", + date: "Tanggal", + editEvent: "Edit event", + eventFallback: "Event", + eventOrganizer: "Penyelenggara Event", + getDirections: "Dapatkan Rute", + linkCopied: "Tautan disalin", + linkCopiedDesc: "Tautan event disalin ke clipboard — tempel di mana saja.", + live: "Live:", + liveMusic: "musik live", + location: "Lokasi", + newLocation: "Lokasi baru", + noRsvps: "Tidak ada RSVP yang tercatat.", + organizer: "Penyelenggara", + rsvpsClosed: "RSVP ditutup — event ini dibatalkan oleh tuan rumah.", + seeMap: "Lihat peta", + shareEvent: "Bagikan event", + shareText: "{{title}} — event skate di SkateSpots", + shareTextFallback: "Lihat event skate ini di SkateSpots", + time: "Waktu", + timeChanged: "Waktu berubah", + updatesFromHost: "Pembaruan dari tuan rumah", + where: "Di mana", + whoCame: "Siapa yang datang", + whosGoing: "Siapa yang hadir", + }, + events: { + calendar: "Kalender", + createTour: "Buat Tour", + events: "Event", + faqFooter: "Ada pertanyaan? Cek FAQ →", + hosting: "Menyelenggarakan", + hostingSubtitle: "Event kamu — RSVP, pembaruan & edit cepat", + list: "Daftar", + noEventsMatchFilters: "Tidak ada event yang cocok dengan filtermu. Coba sesuaikan atau hapus filternya.", + noPast: "Tidak ada event lampau", + noPastBody: "Tidak ada event skate lampau yang ditemukan di filtermu saat ini.", + noTours: "Tidak ada tour ditemukan", + noToursBody: "Belum ada tour skate. Buat yang pertama dan ajak skater menjelajahi spot!", + noToursMatchFilters: "Tidak ada tour yang cocok dengan filtermu. Coba sesuaikan atau hapus filternya.", + noUpcoming: "Tidak ada event mendatang", + noUpcomingBody: "Tidak ada event skate mendatang yang ditemukan. Jadilah yang pertama membuatnya!", + past: "Lampau", + resultsCount: "{{count}} hasil", + searchCity: "Kota…", + searchEvent: "Nama event…", + searchTour: "Nama tour…", + tours: "Tour", + toursSubtitle: "Pemandu lokal, road trip & kompetisi world destruction", + upcoming: "Mendatang", + }, + eventTypes: { + contest: "Kontes", + demo: "Demo", + jam: "Jam", + meetup: "Kopdar", + premiere: "Premiere", + session: "Sesi", + workshop: "Lokakarya", + }, + featured: { + active: "Aktif", + bodyEvent: "Gratis untuk diposting. Event unggulan mendapat lencana dan berada di atas halaman event.", + bodyTour: "Gratis untuk diposting. Tour unggulan mendapat lencana dan berada di atas daftar tour.", + contextEvent: "Event kamu tetap terdaftar gratis — unggulan hanya menambah lencana & dorongan.", + contextTour: "Tour kamu tetap terdaftar gratis — unggulan hanya menambah lencana & dorongan.", + daysRemaining: "Unggulan aktif · {{count}} hari tersisa.", + headingEvent: "Unggulkan event ini", + headingTour: "Unggulkan tour ini", + optional: "opsional", + platformOwner: "Pemilik platform — unggulan selalu aktif.", + }, + filters: { + activeCount: "{{count}} aktif", + all: "Semua", + allLevels: "Semua Tingkat", + eventType: "Jenis Event", + following: "Diikuti", + newest: "Terbaru", + popular: "Populer", + showResults: "Tampilkan Hasil", + showResultsActive: "Tampilkan Hasil · {{count}} aktif", + skillLevel: "Tingkat Kemampuan", + sortBy: "Urutkan Berdasarkan", + topRated: "Rating Tertinggi", + tourCategory: "Kategori Tour", + trusted: "Terpercaya", + trustLevel: "Tingkat Kepercayaan", + verified: "Terverifikasi", + }, + food: { + bar: "Bar", + cafe: "Kafe", + call: "Telepon", + chooseSpot: "Pilih spot...", + directions: "Rute", + fastFood: "Makanan Cepat Saji", + foodCourt: "Food Court", + locationLabel: "Lokasi:", + noneFound: "Tidak Ada Spot Makanan Ditemukan", + noneFoundDesc: "Kami tidak dapat menemukan restoran atau kafe dalam radius 1km dari spot ini. Coba pilih lokasi lain.", + placesFound: "{{count}} tempat ditemukan dalam radius 1km dari {{spot}}", + pub: "Pub", + restaurant: "Restoran", + selectSpot: "Pilih skate spot", + selectSpotDesc: "Pilih skate spot dari menu dropdown di atas untuk menemukan restoran, kafe, dan pilihan makanan lain di sekitarnya.", + selectSpotTitle: "Pilih Skate Spot", + subtitle: "Temukan tempat makan di dekat skate spot favoritmu", + title: "Makanan di Dekat Spot", + unknown: "Tidak diketahui", + website: "Situs Web", + }, + rsvp: { + areYouGoing: "Apakah kamu hadir?", + cant: "Tidak bisa", + cantMakeIt: "Tidak bisa datang", + going: "Saya Hadir", + goingCount: "hadir", + goingShort: "Hadir", + hostNote: "Kamu yang menyelenggarakan ini — tapi kamu tetap bisa mengatur statusmu.", + interested: "Tertarik", + interestedCount: "tertarik", + loginToRsvp: "Masuk untuk RSVP.", + maybe: "Mungkin", + toastError: "Tidak dapat RSVP", + toastGoing: "Kamu hadir! 🛹", + toastInterested: "Ditandai tertarik.", + toastNotGoing: "Ditandai tidak hadir.", + tryAgain: "Silakan coba lagi.", + }, + shop: { + addNip05Settings: "Tambahkan NIP-05 di Pengaturan", + adminRemovedReason: "Admin SkateSpots menghapus shop \"{{name}}\"", + areYouOwner: "Apakah Kamu Pemilik Shop?", + backToMap: "Kembali ke Peta", + claimDesc: "Jika kamu memiliki atau mengelola shop ini, kamu dapat mengklaimnya untuk memverifikasi kepemilikan menggunakan NIP-05.", + claimNip05Intro: "Untuk mengklaim shop ini, tambahkan pengenal NIP-05 yang cocok dengan domain situs web shop. Misalnya, jika situs web shop adalah", + claimNip05Your: "NIP-05 kamu seharusnya", + contactShop: "Hubungi Shop", + deleted: "Shop dihapus", + deletedDesc: "Permintaan penghapusan dikirim ke relay. Sebagian besar relay akan menghapus konten ini.", + deleteDialogDesc: "Ini akan menghapus \"{{name}}\" secara permanen dari semua relay. Tindakan ini tidak dapat dibatalkan.", + deleteDialogTitle: "Hapus Shop?", + deletedReason: "Shop dihapus", + deleteFailed: "Penghapusan gagal", + deleteShop: "Hapus Shop", + linkCopied: "Tautan disalin!", + linkCopiedDesc: "Tautan shop disalin ke clipboard.", + nip05Required: "⚠️ Verifikasi NIP-05 diperlukan untuk mengklaim shop", + opens: "Buka: {{domain}}", + removeAdmin: "Hapus (admin)", + removed: "Shop dihapus", + removedDesc: "Shop ini telah diturunkan dan akan disembunyikan di seluruh SkateSpots.", + removeDialogDesc: "Sebagai admin SkateSpots kamu menurunkan \"{{name}}\". Ini akan disembunyikan di seluruh aplikasi untuk semua orang dan permintaan penghapusan akan dikirim ke relay.", + removeDialogTitle: "Hapus shop ini? (admin)", + removeShop: "Hapus Shop", + tipMapper: "Tip Pemeta", + tipMapperDesc: "Shop ini ditambahkan oleh anggota komunitas. Zap mereka sebagai ucapan terima kasih!", + updateNip05: "Perbarui NIP-05 untuk Klaim", + viewPhotoFull: "Lihat foto layar penuh", + viewPhotoOf: "Lihat foto {{index}} dari {{total}}", + }, + sponsors: { + presentedBy: "Dipresentasikan oleh", + }, + tourCard: { + active: "Aktif", + completed: "Selesai", + contactForPrice: "Hubungi untuk harga", + durationDays: "{{count}} hari", + durationHours: "{{count}} jam", + durationMonths: "{{count}} bulan", + durationWeeks: "{{count}} minggu", + entry: "Masuk: {{amount}} sats", + happeningNow: "Sedang berlangsung", + inDays: "Dalam {{count}} hari", + inHours: "Dalam {{count}}j", + inMonths: "Dalam {{count}} bulan", + inWeeks: "Dalam {{count}} minggu", + maxGroup: "Maks {{count}}", + price: "{{amount}} sats", + prizePool: "{{amount}} sats", + registrationOpen: "Pendaftaran Dibuka", + startingSoon: "Segera dimulai", + teamsMax: "maks {{count}} tim", + tomorrow: "Besok", + worldwide: "Seluruh dunia", + }, + tourDetail: { + about: "Tentang Tour Ini", + availability: "Ketersediaan", + competitionWindow: "Jendela Kompetisi", + contactToBook: "Hubungi Pemandu untuk Memesan", + discountAt: "DISKON {{percent}}% di {{shop}}", + duration: "Durasi", + languages: "Bahasa", + loginToBook: "Masuk untuk Memesan", + loginToBookDesc: "Masuk untuk menghubungi pemandu dan memesan tour ini", + maxGroup: "Grup Maksimal", + meetingPoint: "Titik Pertemuan", + notFound: "Tour Tidak Ditemukan", + notFoundDesc: "Tour ini mungkin telah dihapus atau tidak ada.", + organizer: "Penyelenggara", + partnerDiscount: "Diskon Shop Mitra", + partnerDiscountDesc: "Pesan tour ini untuk mendapatkan diskon di skate shop mitra. Tunjukkan konfirmasi pemesananmu kepada staf shop.", + people: "{{count}} orang", + perPerson: "per orang", + price: "Harga", + runsAbout: "Berlangsung sekitar {{duration}}", + scheduledSession: "Sesi Terjadwal", + shareText: "Lihat tour skate lokal ini: {{title}}", + skillLevel: "Tingkat Kemampuan", + spotTypes: "Jenis Spot", + tourGuide: "Pemandu Tour", + tourSponsors: "Sponsor Tour", + tripDates: "Tanggal Perjalanan", + viewProfile: "Lihat Profil", + }, + updates: { + admin: "Admin", + adminNote: "Kamu memposting sebagai admin SkateSpots. Ini akan diberi label jelas sebagai pemberitahuan admin, bukan dari tuan rumah.", + kindCancelled: "Dibatalkan", + kindNewSpot: "Spot baru", + kindNewTime: "Waktu baru", + kindUpdate: "Pembaruan", + loading: "Memuat pembaruan…", + notifiedCount: "{{count}} orang diberi tahu.", + notifiedEveryone: "Semua orang akan melihatnya di event.", + notifiesRsvps: "Memberi tahu {{count}} RSVP", + noUpdates: "Belum ada pembaruan dari tuan rumah. RSVP dan kamu akan diberi tahu jika ada perubahan.", + placeholder: "Hujan — dipindah ke Minggu jam 2 siang. Bertemu di ledge belakang…", + post: "Posting", + postAdminUpdate: "Posting pembaruan admin", + posted: "Pembaruan diposting", + postError: "Tidak dapat memposting pembaruan", + postUpdate: "Posting pembaruan", + tryAgain: "Silakan coba lagi.", + visibleToEveryone: "Terlihat oleh semua orang di event ini", + }, + destination: { + bitcoin: "Bitcoin", + closeSearch: "Tutup pencarian", + nothingMatches: "Tidak ada yang cocok dengan “{{query}}”.", + placeholder: "Cari spot, shop, merchant Bitcoin…", + shop: "Shop", + spot: "Spot", + typeChars: "Ketik minimal 2 karakter. Mencari skate spot, skate shop, dan merchant Bitcoin.", + typeCharsNear: "Ketik minimal 2 karakter. Mencari skate spot, skate shop, dan merchant Bitcoin di sekitar sini.", + }, + dateWindow: { + any: "Apa saja", + anytime: "Kapan saja", + month: "Bulan Ini", + monthShort: "Bulan", + today: "Hari Ini", + todayShort: "Hari ini", + week: "Minggu Ini", + weekend: "Akhir Pekan", + weekendShort: "AkhPek", + weekShort: "Minggu", + }, + }, + marketUi: { + gearSwap: { + title: "Gear Swap", + subtitle: "Beli & jual gear skate bekas dengan skater lain", + listGear: "Daftarkan Gear", + searchPlaceholder: "Cari gear...", + allCategories: "Semua Kategori", + forSale: "Dijual", + wtb: "WTB", + trust: "Kepercayaan", + filterByTrust: "Filter berdasarkan Kepercayaan", + allSellers: "Semua Penjual", + verifiedOnly: "Hanya Terverifikasi", + trustedPlus: "Terpercaya+", + followingOnly: "Hanya Diikuti", + pickupOrShip: "Ambil sendiri atau kirim", + localPickup: "Ambil di lokal", + ships: "Dikirim", + sortBy: "Urutkan berdasarkan", + newest: "Terbaru", + priceLowHigh: "Harga: Rendah → Tinggi", + priceHighLow: "Harga: Tinggi → Rendah", + trustScore: "Skor Kepercayaan", + nearest: "Terdekat (lokal)", + listingFound: "{{count}} listing ditemukan", + listingsFound: "{{count}} listing ditemukan", + loadFailed: "Gagal memuat listing", + tryLater: "Silakan coba lagi nanti.", + noneTitle: "Tidak ada listing ditemukan", + noneFiltered: "Tidak ada gear yang cocok dengan filtermu saat ini. Coba hapus filternya atau cari yang lain.", + noneFirst: "Jadilah yang pertama mendaftarkan gear kamu — deck, trucks, wheels, sepatu, apa saja yang skate!", + listYourGear: "Daftarkan Gear Kamu", + faqLink: "Ada pertanyaan? Cek FAQ →", + }, + hub: { + browse: "Telusuri", + selling: "Menjual", + myTrades: "Transaksi Saya", + reputation: "Reputasi", + loginListings: "Masuk untuk mengelola listing kamu.", + loginReputation: "Masuk untuk melihat reputasi dan ulasanmu.", + }, + marketplace: { + heroTitle: "Shop & Marketplace", + heroBefore: "Marketplace kami didukung oleh", + heroAfter: "- marketplace terdesentralisasi di Nostr. Skate shop dapat mendaftarkan produk mereka, dan kamu dapat membeli/menjual gear bekas langsung dengan Bitcoin.", + whatIsTitle: "Apa itu Plebeian Market?", + whatIsBody: "Plebeian Market adalah marketplace terdesentralisasi yang dibangun di atas Nostr. Beli dan jual gear skateboarding langsung dengan skater lain menggunakan Bitcoin. Tanpa perantara, tanpa biaya, kebebasan penuh.", + noFeesTitle: "Tanpa Biaya", + noFeesBody: "Tidak ada platform yang mengambil 30%. Penjualan langsung peer-to-peer.", + bitcoinTitle: "Pembayaran Bitcoin", + bitcoinBody: "Bayar dengan Bitcoin. Cepat, aman, global.", + decentralizedTitle: "Terdesentralisasi", + decentralizedBody: "Dibangun di atas Nostr. Tidak ada perusahaan yang mengendalikannya.", + visit: "Kunjungi Plebeian Market", + buySellTitle: "Apa yang Bisa Kamu Beli & Jual", + catCompletes: "Complete Deck", + preBuilt: "Complete siap pakai", + customSetups: "Setup kustom", + beginnerBoards: "Papan pemula", + catParts: "Komponen Deck", + decks: "Deck", + trucks: "Trucks", + wheels: "Wheels", + bearings: "Bearings", + gripTape: "Grip tape", + hardware: "Hardware", + catApparel: "Pakaian & Pelindung", + skateShoes: "Sepatu skate", + clothing: "Pakaian", + helmets: "Helm", + pads: "Pelindung", + backpacks: "Tas punggung", + catAccessories: "Aksesori", + tools: "Perkakas", + wax: "Wax", + rails: "Rails", + stickers: "Stiker", + videos: "Video", + magazines: "Majalah", + howItWorks: "Cara Kerjanya", + step1Title: "Telusuri Produk", + step1Body: "Kunjungi Plebeian Market dan telusuri gear skateboarding dari shop dan individu di seluruh dunia.", + step2Title: "Hubungi Penjual", + step2Body: "Kirim pesan langsung ke penjual via Nostr. Negosiasikan harga, ajukan pertanyaan, atur pengiriman.", + step3Title: "Bayar dengan Bitcoin", + step3Body: "Selesaikan pembelianmu menggunakan Bitcoin Lightning untuk pembayaran instan berbiaya rendah.", + step4Title: "Beri Umpan Balik", + step4Body: "Beri penilaian pengalamanmu dan bangun reputasi penjual di Nostr. Ulasanmu membantu komunitas.", + needBitcoinTitle: "Butuh Bitcoin?", + needBitcoinBefore: "Kamu memerlukan dompet Lightning dengan sejumlah sats untuk berbelanja. Cek", + onboardingGuide: "panduan orientasi", + needBitcoinAfter: "untuk rekomendasi dompet.", + ownShopTitle: "Punya Skate Shop?", + ownShopBody: "Daftarkan shop kamu di SkateSpots dan jual produkmu di Plebeian Market. Jangkau pelanggan di seluruh dunia tanpa biaya platform.", + addShop: "Tambahkan Shop Kamu", + startSelling: "Mulai Menjual", + }, + listingDetail: { + notFound: "Listing tidak ditemukan", + notFoundBody: "Mungkin telah dihapus, atau tautannya salah.", + backToGearSwap: "Kembali ke Gear Swap", + gearSwap: "Gear Swap", + viewPhoto: "Lihat foto {{n}}", + photoAlt: "{{title}} — foto {{n}}", + wantToBuy: "INGIN MEMBELI", + sold: "TERJUAL", + description: "Deskripsi", + usuallyHere: "Biasanya di sini {{availability}}", + listed: "Didaftarkan {{date}}", + listingCountOne: "{{count}} listing · {{age}}h lalu", + listingCountMany: "{{count}} listing · {{age}}h lalu", + relistActive: "Daftarkan ulang sebagai aktif", + markSold: "Tandai terjual", + deleteListing: "Hapus listing", + makeOffer: "Ajukan penawaran", + shareListing: "Bagikan listing", + unknown: "Tidak diketahui", + linkCopied: "Tautan disalin", + linkCopiedBody: "Bagikan ke skater.", + copyFailed: "Tidak dapat menyalin tautan", + relisted: "Didaftarkan ulang", + relistedBody: "Listing kamu aktif kembali.", + couldNotUpdate: "Tidak dapat memperbarui", + somethingWrong: "Terjadi kesalahan", + }, + create: { + imageUploaded: "Gambar diunggah", + uploadFailed: "Unggahan gagal", + failed: "Gagal", + cooldownActive: "Cooldown aktif", + cooldownWait: "Harap tunggu {{time}} sebelum membuat listing lain", + limitReached: "Batas listing tercapai", + limitReachedBody: "Kamu telah mencapai batas bulanan {{limit}} listing", + feeRequired: "Biaya diperlukan", + feeRequiredBody: "Harap bayar biaya anti-spam untuk melanjutkan", + titleRequired: "Judul wajib diisi", + categoryRequired: "Kategori wajib diisi", + photoRequired: "Foto wajib diisi", + photoRequiredBody: "Minimal satu foto diperlukan saat menjual gear", + nip05Required: "Verifikasi NIP-05 diperlukan", + nip05RequiredBody: "Kamu memerlukan alamat Nostr terverifikasi untuk mendaftarkan gear", + priceRequired: "Harga wajib diisi untuk listing harga tetap", + sizeRequired: "Ukuran wajib diisi", + sizeRequiredBody: "Silakan pilih ukuran untuk {{category}}", + conditionRequired: "Kondisi wajib diisi", + conditionRequiredBody: "Silakan pilih kondisi {{category}} kamu", + wtbPosted: "Ingin Membeli diposting!", + wtbPostedBody: "Penjual akan dapat menemukan permintaanmu.", + listingCreated: "Listing dibuat!", + listingCreatedBody: "Gear kamu kini terdaftar.", + publishFailed: "Gagal mempublikasikan", + loginRequired: "Perlu Masuk", + loginRequiredBody: "Kamu perlu masuk untuk mendaftarkan gear.", + backToStash: "Kembali ke Stash", + backToSpot: "Kembali ke {{title}}", + backToMarketplace: "Kembali ke Marketplace", + backToMap: "Kembali ke Peta", + wantToBuy: "Ingin Membeli", + listYourGear: "Daftarkan Gear Kamu", + wtbSubtitle: "Beri tahu komunitas gear apa yang kamu cari", + sellSubtitle: "Jual gear skateboarding ke komunitas", + fromStashTitle: "Listing dari Stash kamu", + fromStashBody: "Terisi otomatis dengan detail item stash kamu. Tinjau dan pilih spot pertemuan!", + nip05Banner: "Untuk mencegah spam dan melindungi pembeli, kamu memerlukan alamat Nostr terverifikasi (NIP-05) untuk mendaftarkan gear.", + verifiedLabel: "Terverifikasi:", + checkingTrust: "Memeriksa tingkat kepercayaanmu...", + trustLevel: "Tingkat Kepercayaan:", + trusted: "Terpercaya", + active: "Aktif", + newcomer: "Pendatang Baru", + newUser: "Pengguna Baru", + remaining: "{{remaining}} dari {{limit}} listing tersisa bulan ini", + cooldownBody: "Pengguna baru memiliki cooldown 24 jam antar listing.", + timeRemaining: "Waktu tersisa: {{time}}", + monthlyLimitTitle: "Batas Bulanan Tercapai", + monthlyLimitBody: "Kamu telah mencapai batas {{limit}} listing bulan ini. Bangun reputasimu dengan membuat spot atau menyelesaikan penjualan untuk menambah batasmu.", + powAccepted: "Proof of work diterima!", + feePaid: "Biaya Dibayar!", + canCreateNow: "Kamu sekarang dapat membuat listingmu.", + whatDoTitle: "Apa yang ingin kamu lakukan?", + sellGear: "JUAL GEAR", + categoryTitle: "Kategori *", + categoryHint: "Jenis gear apa?", + detailsTitle: "Detail Gear", + detailsWtbHint: "Jelaskan apa yang kamu cari", + detailsSellHint: "Ceritakan kepada pembeli tentang barangmu", + titleLabel: "Judul *", + titlePlaceholderWtb: "Mencari deck 8.0\"", + titlePlaceholderSell: "Deck Palace 8.25\" Hampir Baru", + summaryLabel: "Ringkasan Singkat", + summaryPlaceholderWtb: "Merek apa saja, lebih suka grafis minimal", + summaryPlaceholderSell: "Kondisi bagus, jarang dipakai", + descriptionLabel: "Deskripsi", + descriptionPlaceholderWtb: "Jelaskan persis apa yang kamu cari - preferensi merek, syarat kondisi, dll.", + descriptionPlaceholderSell: "Dapat deck ini saat Natal tapi lebih suka ukuran lebih kecil. Senang membiarkanmu mencobanya sebelum membeli!", + fulfilmentLabel: "Bagaimana cara pemenuhannya?", + pickup: "Ambil sendiri", + pickupHint: "Bertemu di lokal", + ships: "Dikirim", + shipsHint: "Kirim via pos", + both: "Keduanya", + bothHint: "Salah satu", + addressNote: "Kami tidak pernah mengumpulkan alamatmu — untuk pengiriman, bagikan secara privat di obrolan transaksi.", + postageLabel: "Siapa yang membayar ongkos kirim?", + requireEscrow: "Wajibkan escrow", + requireEscrowHint: "Minta pembeli menyelesaikan melalui escrow Cashu.", + postageBuyer: "Pembeli bayar", + postageSeller: "Saya bayar", + postageSplit: "Bagi rata", + sizeLabel: "Ukuran", + selectSize: "Pilih ukuran", + truckHeight: "Tinggi Trucks", + selectHeight: "Pilih tinggi", + wheelHardness: "Kekerasan Wheels", + selectHardness: "Pilih kekerasan", + pricingTitle: "Harga", + pricingWtbHint: "Bagaimana kamu ingin membayar?", + pricingSellHint: "Bagaimana kamu ingin menjual?", + priceLabel: "Harga *", + currencyLabel: "Mata Uang", + photosTitle: "Foto", + photosSellHint: "Minimal satu foto diperlukan", + photosWtbHint: "Opsional - tambahkan gambar referensi", + productPhoto: "Produk {{n}}", + upload: "Unggah", + photosNote: "Tambahkan hingga 5 foto. Gambar pertama akan menjadi foto utama.", + pickupLocationTitle: "Lokasi Pengambilan", + pickupLocationHint: "Tautkan ke skate spot untuk pertemuan yang mudah", + searchSpots: "Cari spot...", + noSpotsFound: "Tidak ada spot ditemukan. Coba pencarian lain.", + availabilityLabel: "Kapan kamu biasanya tersedia?", + availabilityPlaceholder: "Akhir pekan 10.00-14.00, Sel/Kam malam", + availabilityHint: "Membantu pembeli berkoordinasi pertemuan denganmu", + durationTitle: "Durasi Listing", + durationHint: "Berapa lama listing ini harus tetap aktif?", + publishing: "Mempublikasikan...", + checkingEligibility: "Memeriksa kelayakan...", + cooldownButton: "COOLDOWN: {{time}}", + limitReachedButton: "BATAS TERCAPAI", + payFeeButton: "BAYAR BIAYA UNTUK LANJUT", + postWtbButton: "POSTING INGIN MEMBELI", + listForSaleButton: "DAFTARKAN GEAR UNTUK DIJUAL", + }, + trades: { + title: "Transaksi Saya", + loginBody: "Masuk untuk mengelola transaksi marketplace dan reputasimu.", + subtitle: "Konfirmasi, permintaan, dan reputasi yang dibangunnya. Pembayaran diatur dengan skater lain — aplikasi hanya mencatat kesepakatannya.", + actionNeeded: "Perlu tindakan", + askedToConfirmSale: "meminta kamu mengonfirmasi penjualan", + recordedSale: "mencatat penjualan — konfirmasi sisimu", + confirmSale: "Konfirmasi penjualan", + confirm: "Konfirmasi", + nothingWaiting: "Tidak ada yang menunggu kamu saat ini. 🛹", + yourRecords: "Catatan transaksimu", + noTrades: "Belum ada transaksi. Tutup kesepakatan dan konfirmasi untuk mulai membangun reputasi.", + browseGearSwap: "Telusuri Gear Swap", + roleSold: "Terjual", + roleBought: "Dibeli", + roleTrade: "Tukar", + with: "dengan", + viewListing: "Lihat listing", + revoke: "Tarik", + revokeTitle: "Tarik catatan transaksi ini?", + revokeBody: "Ini akan berhenti dihitung untuk reputasimu. Pihak lain tetap menyimpan atestasi mereka sendiri. Gunakan ini untuk kesepakatan yang disengketakan atau keliru.", + revokeNote: "Ditarik oleh penulis.", + revoked: "Catatan transaksi ditarik", + revokedBody: "Tidak lagi dihitung untuk reputasi.", + revokeFailed: "Tidak dapat menarik transaksi", + saleConfirmed: "Penjualan dikonfirmasi", + saleConfirmedBody: "Mereka sekarang dapat mengonfirmasi sisinya.", + saleConfirmFailed: "Tidak dapat mengonfirmasi penjualan", + tradeConfirmed: "Transaksi dikonfirmasi", + tradeConfirmedBody: "Reputasi diperbarui untuk kalian berdua.", + tradeConfirmFailed: "Tidak dapat mengonfirmasi transaksi", + somethingWrong: "Terjadi kesalahan.", + }, + card: { + listingDeleted: "Listing dihapus", + listingRemoved: "Listing dihapus", + listingDeletedBody: "Listing kamu telah dihapus. Relay yang menghormati penghapusan akan berhenti menyajikannya.", + listingRemovedBody: "Listing ini telah diturunkan dan akan disembunyikan di seluruh SkateSpots.", + removeFailed: "Penghapusan gagal", + somethingWrong: "Terjadi kesalahan", + markedSold: "Ditandai terjual", + markedSoldBody: "Listing kamu kini ditampilkan sebagai terjual.", + couldNotUpdate: "Tidak dapat memperbarui", + relisted: "Didaftarkan ulang", + relistedBody: "Listing kamu aktif kembali.", + listingOptions: "Opsi listing", + report: "Laporkan", + removeAdmin: "Hapus (admin)", + postage: "ongkos kirim", + newSeller: "Penjual baru", + saleOne: "{{count}} penjualan", + saleMany: "{{count}} penjualan", + iHaveThis: "Saya Punya Ini!", + deleteTitle: "Hapus \"{{title}}\"?", + adminRemoveTitle: "Hapus listing ini? (admin)", + deleteBody: "Ini meminta relay menghapus listingmu \"{{title}}\". Tidak dapat dibatalkan dari sini — kamu harus membuat yang baru.", + adminRemoveBody: "Sebagai admin SkateSpots kamu menurunkan \"{{title}}\". Ini akan disembunyikan di seluruh aplikasi untuk semua orang dan permintaan penghapusan akan dikirim ke relay.", + deleting: "Menghapus…", + removing: "Menghapus…", + deleteListing: "Hapus Listing", + removeListing: "Hapus Listing", + reportCount: "{{count}} laporan", + reports: "{{count}} laporan", + viewTitle: "Lihat {{title}}", + reportListing: "Laporkan Listing", + manageListing: "Kelola listing", + trusted: "Terpercaya", + daysOld: "{{n}}h lalu", + monthsOld: "{{n}}bl lalu", + yearsOld: "{{n}}th lalu", + listingsCount: "{{count}} listing", + postageBuyer: "ongkos kirim: pembeli", + postageSeller: "ongkos kirim: penjual", + postageSplit: "ongkos kirim: bagi rata", + powTitle: "NIP-13 proof of work — anti-spam gratis", + verifiedTradeOne: "{{count}} transaksi terverifikasi", + verifiedTrades: "{{count}} transaksi terverifikasi", + reportSubmitted: "Laporan terkirim", + reportSubmittedBody: "Terima kasih telah membantu menjaga marketplace tetap aman.", + reportFailed: "Gagal mengirim laporan", + selectReason: "Silakan pilih alasan", + reportDialogBody: "Bantu jaga marketplace tetap aman dengan melaporkan listing yang tidak pantas atau menyesatkan.", + reasonLabel: "Alasan laporan *", + detailsLabel: "Detail tambahan (opsional)", + detailsPlaceholder: "Berikan konteks tambahan apa pun yang mungkin membantu...", + reportNote: "Laporan dipublikasikan ke Nostr dan membantu komunitas mengidentifikasi listing bermasalah. Listing dengan banyak laporan dapat otomatis disembunyikan.", + submitting: "Mengirim...", + submitReport: "Kirim Laporan", + }, + tradeActions: { + tradeConfirmed: "Transaksi dikonfirmasi", + tradeConfirmedWithProof: "Bukti yang dapat diverifikasi telah dilampirkan — ini dihitung sebagai transaksi terverifikasi.", + tradeConfirmedBody: "Reputasi diperbarui untuk kalian berdua.", + tradeConfirmFailed: "Tidak dapat mengonfirmasi transaksi", + somethingWrong: "Terjadi kesalahan.", + requestNote: "Harap konfirmasi transaksi kita untuk \"{{title}}\".", + requestSent: "Konfirmasi diminta", + requestSentBody: "Penjual sekarang dapat mengonfirmasi penjualan dan membangun reputasi kalian berdua.", + requestFailed: "Tidak dapat mengirim permintaan", + escrowRefunded: "Escrow dikembalikan", + escrowRefundedBody: "Dana kembali ke dompet Cashu kamu.", + escrowRefundFailed: "Tidak dapat mengembalikan escrow", + confirmThisTrade: "Konfirmasi transaksi ini", + escrowAndRequest: "Escrow & permintaan", + shipsEscrowHint: "Kesepakatan kirim — gunakan escrow agar tidak ada pihak yang mengirim ke ketidakpastian. Bagikan alamatmu secara privat di obrolan transaksi, jangan di sini.", + shipsHint: "Kesepakatan kirim — utamakan escrow jika penjual menawarkannya, dan bagikan alamatmu hanya di obrolan.", + askSeller: "Minta penjual mengonfirmasi", + waitingSeller: "Konfirmasi diminta — menunggu penjual.", + refundEscrow: "Kembalikan escrow", + buyWithSats: "Beli dengan sats", + depositTitle: "Deposit iktikad baik (opsional)", + payDeposit: "Bayar deposit", + depositBefore: "Pertukaran tidak memiliki invoice, jadi beginilah cara mendapatkannya", + verifiableCost: "biaya yang dapat diverifikasi", + depositAfter: ". Dikembalikan saat pengiriman (atau gunakan escrow Cashu untuk pengembalian otomatis). ⚠️ Membuktikan komitmen, bukan pengiriman.", + depositPaid: "Deposit dibayar", + depositPaidBody: "Tersimpan — akan dilampirkan saat transaksi dikonfirmasi.", + paid: "Dibayar ⚡", + paidWithProof: "Menyimpan bukti yang dapat diverifikasi — konfirmasi transaksi agar dihitung.", + paidBody: "Minta penjual mengonfirmasi transaksi agar dihitung untuk kalian berdua.", + }, + offers: { + accepted: "Diterima", + declined: "Ditolak", + withdrawn: "Ditarik", + open: "Terbuka", + noAmount: "tanpa jumlah", + titleOwner: "Penawaran ({{count}})", + titleBuyer: "Negosiasimu", + you: "Kamu", + them: "Mereka", + paidAskConfirm: "Dibayar — minta penjual mengonfirmasi transaksi.", + payWithSats: "Bayar dengan sats", + accept: "Terima", + decline: "Tolak", + counter: "Tawar balik", + counterPlaceholder: "Tawaran balikmu (sats)", + send: "Kirim", + counterItemPlaceholder: "…atau tawar balik dengan item untuk ditukar (opsional)", + waitingOn: "Menunggu", + waitingOnSuffix: "— giliranmu akan kembali jika mereka menawar balik.", + withdraw: "Tarik", + dmAccepted: "✅ Penawaranmu diterima! Kirim pesan untuk mengatur penyerahan.", + dmDeclined: "❌ Penawaranmu ditolak.", + offerAccepted: "Penawaran diterima", + offerDeclined: "Penawaran ditolak", + respondFailed: "Tidak dapat merespons", + somethingWrong: "Terjadi kesalahan.", + offerWithdrawn: "Penawaran ditarik", + withdrawFailed: "Tidak dapat menarik", + enterAmountOrItem: "Masukkan jumlah atau item untuk ditukar", + counterDm: "Penawaran balik", + counterSent: "Penawaran balik terkirim", + counterSentBody: "Sekarang giliran mereka.", + counterFailed: "Tidak dapat mengirim penawaran balik", + }, + offer: { + validAmount: "Masukkan jumlah yang valid", + describeOffer: "Deskripsikan penawaranmu", + describeOfferBody: "Tambahkan jumlah, item untuk ditukar, atau pesan.", + dmAmount: " untuk {{amount}} sats", + dmItem: " (menawarkan: {{item}})", + dmBody: "🛹 Penawaran baru untuk listingmu \"{{title}}\"{{amount}}{{item}}.{{note}}", + sent: "Penawaran terkirim", + sentBody: "{{sellerName}} dapat menerima atau menolaknya.", + sendFailed: "Tidak dapat mengirim penawaran", + somethingWrong: "Terjadi kesalahan.", + title: "Ajukan penawaran", + description: "Tawarkan sats, atau tukar sesuatu — {{sellerName}} dapat menerima, menolak, atau menawar balik. Kamu mengatur penyerahannya di antara kalian sendiri.", + amountLabel: "Jumlah (sats, opsional)", + amountPlaceholder: "mis. 45000", + itemLabel: "Atau menukar sesuatu (opsional)", + itemPlaceholder: "mis. deck 8.25 saya + wheels cadangan", + itemHint: "Menukar? Taruh apa yang kamu tawarkan di sini — kamu dapat menggabungkannya dengan sats.", + messageLabel: "Pesan (opsional)", + messagePlaceholder: "Apa pun yang perlu diketahui penjual…", + send: "Kirim penawaran", + }, + markSold: { + enterBuyer: "Masukkan npub pembeli", + dealClosed: "Kesepakatan ditutup 🎉", + dealClosedBody: "Listing ditandai terjual dan transaksi dipublikasikan untuk reputasi.", + closeFailed: "Tidak dapat menutup kesepakatan", + somethingWrong: "Terjadi kesalahan.", + title: "Tutup kesepakatan", + description: "Menandai listing ini terjual dan mencatat atestasi transaksi bertanda tangan untukmu dan pembeli.", + buyerLabel: "npub Pembeli", + methodLabel: "Bagaimana pembayarannya? (dilaporkan sendiri)", + amountLabel: "Jumlah dalam sats (opsional)", + submit: "Tandai terjual", + }, + handoff: { + title: "Atur penyerahan", + suggest: "Sarankan waktu & tempat", + suggestDm: "Hai! Saya ingin membeli \"{{title}}\". Sarankan waktu dan tempat untuk bertemu — senang bertemu di skate spot publik.", + orMeetAt: "Atau bertemu di spot publik terdekat:", + spotDm: "Hai! Saya ingin membeli \"{{title}}\". Mau bertemu di {{spot}}? {{url}}", + shareDelivery: "Bagikan detail pengiriman", + deliveryDm: "Hai! Saya ingin membeli \"{{title}}\". Berikut detail pengiriman saya:\n\nNama:\nAlamat:\n\n(Hanya bagikan yang diperlukan kurir.)", + useLocker: "Gunakan loker / titik paket", + lockerDm: "Hai! Saya ingin membeli \"{{title}}\". Bisakah kita menggunakan loker paket / toko paket alih-alih alamat rumah?", + noteBefore: "Detail ini tetap di obrolan privat — SkateSpots tidak pernah melihatnya. Untuk kesepakatan kirim, utamakan", + escrow: "escrow", + noteMiddle: ", dan", + neverPay: "jangan pernah membayar di luar jalur aplikasi", + noteAfter: ". Bertemu di tempat publik.", + }, + shipping: { + noCounterparty: "Belum ada pihak lawan", + noCounterpartyBody: "Penjual harus mencatat penjualan (menyebut pembeli) terlebih dahulu.", + markedShipped: "Ditandai dikirim", + markedReceived: "Ditandai diterima", + issueReported: "Masalah dilaporkan", + receivedBody: "Terima kasih — ini tidak melepaskan escrow; selesaikan langsung dengan penjual.", + notifiedBody: "Pihak lain telah diberi tahu.", + updateFailed: "Tidak dapat memperbarui", + somethingWrong: "Terjadi kesalahan.", + title: "Pengiriman", + shipped: "dikirim", + received: "diterima", + issue: "masalah", + trackingPlaceholder: "Nomor pelacakan (opsional)", + iShipped: "Saya sudah mengirimnya", + iReceived: "Saya menerimanya", + reportIssue: "Laporkan masalah", + noteBefore: "Dilaporkan sendiri — catatan logistik,", + notProof: "bukan bukti", + noteAfter: ". Menandai \"diterima\" tidak melepaskan escrow. ⚠️ Jangan memotret paket dengan alamat yang terlihat, dan hanya bagikan nomor pelacakan jika kamu nyaman jika itu publik.", + }, + pay: { + sent: "Pembayaran terkirim ⚡", + sentWithProof: "Menyimpan bukti pembayaran yang dapat diverifikasi — akan dihitung sebagai pembayaran terverifikasi.", + sentBody: "Beri tahu penjual — mereka dapat mengonfirmasi transaksi agar dihitung untuk kalian berdua.", + failed: "Pembayaran gagal", + title: "Bayar dengan sats", + descSendPrefix: "Kirim", + descSendSuffix: "ke {{sellerName}} untuk menyelesaikan kesepakatan ini.", + descSettle: "Selesaikan kesepakatan ini langsung dengan {{sellerName}}.", + paid: "Dibayar!", + paidBody: "Minta penjual mengonfirmasi transaksi — dua konfirmasi membangun reputasi kalian berdua.", + noMethod: "{{sellerName}} belum menetapkan metode pembayaran (tidak ada invoice atau alamat Lightning). Kirim pesan untuk mengatur pembayaran.", + ownListing: "Ini listing milikmu sendiri.", + paying: "Membayar…", + pay: "Bayar", + payAmount: "Bayar {{amount}} sats", + footnote: "Membayar dari dompet terhubungmu (NWC, WebLN, atau Cashu) langsung ke {{sellerName}} — SkateSpots tidak pernah menyimpan dananya.", + }, + spamFee: { + invoiceComment: "Biaya listing SkateSpots", + generateFailed: "Gagal membuat invoice", + paymentSuccess: "Pembayaran berhasil!", + satsSent: "{{amount}} sats terkirim ke {{name}}", + autoPayFailed: "Pembayaran otomatis gagal", + autoPayFailedBody: "Harap bayar secara manual menggunakan kode QR atau invoice", + invoiceCopied: "Invoice disalin!", + copyFailed: "Gagal menyalin", + received: "Pembayaran Diterima!", + receivedBody: "Biaya {{amount}} sat kamu telah dibayar. Kamu sekarang dapat membuat listingmu.", + title: "Biaya Listing Sekali Bayar", + subtitle: "Sebagai anggota baru, biaya kecil diperlukan untuk listing pertamamu.", + whyTitle: "Mengapa saya perlu membayar?", + spamLabel: "Pencegahan spam:", + spamBody: "Biaya ini menghentikan bot dan penipu membanjiri marketplace dengan listing palsu.", + trustLabel: "Membangun kepercayaan:", + trustBody: "Akun baru perlu membuktikan komitmen sebelum mendaftarkan. Setelah beberapa listing sukses, biaya ini dibebaskan.", + supportsLabel: "Mendukung komunitas:", + supportsPrefix: "Biaya diberikan kepada", + supportsSpotOwner: " — orang yang membuat spot ini!", + supportsPlatform: " — membantu menjaga SkateSpots tetap berjalan.", + oneTimeFee: "~${{usd}} USD • Biaya sekali bayar", + payToContinue: "Bayar {{amount}} sats untuk Lanjut", + proveWork: "Buktikan kerja sebagai gantinya — gratis", + proveWorkBody: "Habiskan beberapa detik CPU alih-alih {{amount}} sats. Tanpa uang, tanpa dompet — pajak spam, bukan pembayaran.", + generating: "Membuat invoice...", + processing: "Memproses pembayaran...", + qrAlt: "Kode QR Pembayaran", + copyInvoice: "Salin Invoice", + openWallet: "Buka Dompet", + payWithWallet: "Bayar dengan Dompet Terhubung", + scanHint: "Pindai kode QR dengan dompet Lightning atau gunakan tombol di atas", + skipTitle: "Cara melewati biaya ini di masa depan:", + skip1: "Tambahkan skate spot ke peta", + skip2: "Selesaikan 2-3 listing sukses", + skip3: "Bangun reputasi komunitasmu", + skipNote: "Anggota terpercaya mendapat listing gratis tanpa batas!", + }, + reputation: { + highlyTrusted: "Pedagang sangat terpercaya", + building: "Membangun reputasi", + newTrader: "Pedagang baru", + title: "Transaksi", + verified: "Terverifikasi", + sales: "Penjualan", + purchases: "Pembelian", + tradeConfirmedOne: "transaksi yang dikonfirmasi bersama", + tradeConfirmedMany: "transaksi yang dikonfirmasi bersama", + with: "dengan", + personOne: "orang", + personMany: "orang", + awaiting: "Menunggu konfirmasi bersama", + withPaymentProof: "dengan bukti pembayaran terlampir", + selfReported: "(dilaporkan sendiri — tidak terverifikasi)", + paymentVerified: "pembayaran terverifikasi", + zapReceipt: "(bukti zap)", + singlePartnerWarning: "Setiap konfirmasi dilakukan dengan akun yang sama. Konfirmasi bersama bersifat dilaporkan sendiri, jadi perlakukan catatan ini dengan hati-hati.", + lowDiversityWarning: "Sebagian besar konfirmasi berasal dari sangat sedikit akun. Sekelompok kecil yang saling menjamin bisa tampak sibuk — perlakukan catatan ini dengan hati-hati.", + ringWarning: "Akun-akun ini sebagian besar bertransaksi satu sama lain — klaster tertutup. Konfirmasi bersama di dalam lingkaran lemah sebagai bukti.", + weighted: "Dibobot berdasarkan kepercayaan & aktivitas", + footnote: "Dilaporkan sendiri dan ditandatangani bersama — sebuah sinyal, bukan bukti pembayaran.", + }, + reputationPanel: { + reviewOfYou: "Ulasan tentang kamu", + yourRecord: "catatanmu", + listing: "Listing", + averageOne: "rata-rata dari {{count}} penilaian", + averageMany: "rata-rata dari {{count}} penilaian", + reviewsTitle: "Ulasan & catatan transaksi", + fromOthers: "{{count}} dari orang lain", + emptyBefore: "Belum ada catatan transaksi. Selesaikan kesepakatan dan konfirmasi di", + emptyAfter: "— setiap konfirmasi menjadi ulasan di kedua profil.", + }, + recommendations: { + published: "Rekomendasi dipublikasikan", + publishedBody: "Terima kasih telah menjamin.", + failed: "Tidak dapat merekomendasikan", + somethingWrong: "Terjadi kesalahan.", + title: "Pedagang terpercaya", + recommendedBy: "Direkomendasikan oleh", + skaterOne: "skater", + skaterMany: "skater", + none: "Belum ada rekomendasi.", + youRecommend: "Kamu merekomendasikan pedagang ini ✓", + recommend: "Rekomendasikan sebagai pedagang terpercaya", + }, + notification: { + newOffer: "Penawaran baru", + counterOffer: "Penawaran balik", + offerAccepted: "Penawaran diterima", + offerDeclined: "Penawaran ditolak", + offerWithdrawn: "Penawaran ditarik", + confirmTrade: "Konfirmasi transaksi", + tradeConfirmed: "Transaksi dikonfirmasi", + reviewOffer: "Tinjau penawaran", + openListing: "Buka listing", + }, + confirmRow: { + rateTrade: "Beri nilai transaksi:", + }, + deckRating: { + title: "{{value}}/10 deck", + aria: "{{n}} dari 10", + }, + clink: { + tip: "Tip dalam Bitcoin", + copiedBody: "Kode CLINK disalin ke clipboard.", + copyFailed: "Gagal menyalin", + copyFailedBody: "Tidak dapat mengakses clipboard.", + whatIs: "Apa itu CLINK?", + tooltipTitle: "Bayar langsung dengan Bitcoin melalui Nostr", + tooltipBody: "CLINK adalah kode pembayaran mandiri — tanpa akun aplikasi, tanpa perantara. Pindai dengan dompet Lightning yang kompatibel dan tip langsung diterima mereka.", + descRecipient: "Kirim pembayaran Bitcoin (Lightning) mandiri ke {{recipientName}} — tanpa perantara.", + descGeneric: "Kirim pembayaran Bitcoin (Lightning) mandiri melalui Nostr — tanpa perantara.", + qrAlt: "Kode QR CLINK Offer", + copyCode: "Salin kode CLINK", + openWallet: "Buka di dompet CLINK", + copyToWallet: "Salin kode untuk dompetmu", + priceFixed: "Tetap — {{amount}} sats", + priceFixedShort: "Harga tetap", + priceVariable: "Harga variabel", + priceVariableCurrency: "Dalam {{currency}}", + priceSpontaneous: "Kamu tentukan jumlahnya", + footnote: "Pindai dengan dompet yang kompatibel dengan CLINK (mis. ShockWallet). Jika tidak ada yang terbuka, salin kode di atas — mungkin kamu belum menginstal dompet yang kompatibel dengan CLINK. Tanpa kustodian, tanpa server web: invoice diminta langsung melalui Nostr.", + }, + paymentReadiness: { + ready: "Kamu bisa dibayar", + notReady: "Atur pembayaran untuk bisa dibayar", + readyBefore: "Alamat Lightning-mu", + readyAfter: " ada di profilmu — orang dapat zap dan membayarmu langsung.", + silentSet: " Alamat Bitcoin Silent Payment juga telah disetel.", + notReadyBefore: "Tambahkan alamat Lightning (dan opsional alamat Bitcoin Silent Payment) ke", + nostrProfile: "profil Nostr", + notReadyAfter: "agar skater bisa membayarmu. Disetel sekali dan berfungsi di semua profilmu di sini.", + }, + seller: { + trade: "Tukar", + active: "Aktif", + markSold: "Tandai terjual", + yourListings: "Listing kamu", + activeCount: "{{count}} aktif", + listItem: "Daftarkan item", + loading: "Memuat listing kamu…", + empty: "Kamu belum punya listing.", + listFirst: "Daftarkan item pertamamu", + }, + noffer: { + label: "Kode CLINK Offer", + optional: "(opsional, lanjutan)", + offerId: "Penawaran: {{id}}", + relay: "Relay: {{relay}}", + invalidBefore: "Itu sepertinya bukan kode", + invalidAfter: "yang valid.", + valid: "Kode CLINK valid — tombol \"Bayar via CLINK\" akan muncul di profilmu.", + help: "Tempel kode pembayaran CLINK mandiri (mis. dari ShockWallet / Lightning.Pub) untuk menerima pembayaran Lightning native Nostr — tanpa server web atau kustodian.", + learnSpecs: "Pelajari spesifikasi", + }, + escrowPanel: { + escrowed: "Di-escrow {{amount}} sats", + mint: "Mint", + refundSinceBefore: "Pembeli bisa refund sejak", + redeemBefore: "Penjual bisa menebus sekarang · pembeli refund setelah", + noExpiry: "Tidak ada kedaluwarsa yang disetel pada token ini.", + }, + escrowRequest: { + enterAmount: "Masukkan jumlah escrow", + minLock: "Kunci minimal {{days}} hari", + requestNote: "Escrow {{amount}} sats untuk transaksi kita — harap konfirmasi penjualannya.", + created: "Escrow dibuat 🎉", + createdBody: "{{amount}} sats terkunci selama {{days}} hari. {{sellerName}} dapat menebus saat pengiriman.", + createFailed: "Tidak dapat membuat escrow", + somethingWrong: "Terjadi kesalahan.", + title: "Escrow transaksi ini", + description: "Dana terkunci untuk {{sellerName}} dan dapat kamu kembalikan jika kesepakatan gagal setelah tenggat. Memerlukan dompet Lightning yang terhubung.", + amountLabel: "Jumlah (sats)", + daysLabel: "Refund pembeli setelah (hari)", + daysHint: "Setelah sekian hari kamu dapat mengambil kembali dana jika penjual belum mengirim.", + nativeOnly: "Escrow Cashu hanya tersedia di aplikasi SkateSpots (bukan versi web).", + lockAndRequest: "Kunci & minta", + }, + }, + labOptions: { + coach: { + skill: { + basics: "Dasar-dasar", + ollies: "Ollie", + kickflips: "Kickflip", + grinds: "Grind & Slide", + manuals: "Manual", + inverts: "Invert", + vert: "Vert/Ramp", + bowl: "Bowl", + street: "Street", + freestyle: "Freestyle", + safety: "Keselamatan", + diy: "Modul Skate DIY", + }, + skillDesc: { + basics: "Mendorong, kuda-kuda, keseimbangan, berbelok", + ollies: "Ollie dan variasinya (nollie, fakie)", + kickflips: "Kickflip, heelflip, dan variasinya", + grinds: "50-50, 5-0, boardslide, dan lainnya", + manuals: "Manual, nose manual, kombinasi", + inverts: "Invert, handplant, eggplant, andrecht", + vert: "Half-pipe, quarter-pipe, drop-in", + bowl: "Mengukir bowl, pumping, line", + street: "Rintangan street dan kreativitas", + freestyle: "Trik flatground dan flow", + safety: "Cara jatuh, perlengkapan pelindung, pencegahan cedera", + diy: "Membangun ramp, rail, ledge, dan rintangan skate lainnya", + }, + }, + filmer: { + service: { + miniclips: "Klip Mini", + longparts: "Video Part Panjang", + koth: "Gaya King of the Road", + documentaries: "Dokumenter", + contests: "Syuting untuk Kontes", + raw: "Rekaman Mentah", + followlines: "Syuting Follow / Line", + lines: "Syuting Line & B-Roll", + }, + serviceDesc: { + miniclips: "Klip 15-60 detik untuk media sosial", + longparts: "Video part penuh 3-10 menit dengan musik", + koth: "Video skate bergaya petualangan/tantangan", + documentaries: "Konten budaya skate dan berbasis cerita", + contests: "Liputan kontes dan kompetisi profesional", + raw: "Rekaman multi-sudut tanpa edit", + followlines: "Kamera follow fisheye untuk line", + lines: "Line lensa panjang dan b-roll sinematik", + }, + skill: { + vx1000: "VX1000", + hvx: "HVX / HPX", + cinema: "Kamera Cinema", + dslr: "DSLR / Mirrorless", + actioncam: "GoPro / Action Cam", + phone: "Syuting dengan Ponsel", + drone: "Drone / Udara", + gimbal: "Gimbal / Stabilizer", + fisheye: "Lensa Fisheye", + longlens: "Lensa Panjang", + "4k": "4K / High Frame Rate", + editing: "Pengeditan Video", + color: "Color Grading", + }, + skillDesc: { + vx1000: "Estetika skateboarding VX1000 klasik", + hvx: "Tampilan standar-def / HD Panasonic HVX/HPX", + cinema: "Kamera cinema (FX3, seri C, RED, BMPCC)", + dslr: "Kamera DSLR atau mirrorless berkualitas tinggi", + actioncam: "POV dan mount GoPro / action cam", + phone: "Syuting seluler dengan ponsel pintar modern", + drone: "Rekaman udara dan drone", + gimbal: "Gerakan gimbal yang stabil", + fisheye: "Bidikan lensa fisheye sudut lebar", + longlens: "Lensa panjang untuk bidikan detail", + "4k": "Resolusi 4K dan slow-mo high frame rate", + editing: "Pengeditan video dan pasca-produksi profesional", + color: "Koreksi warna dan grading", + }, + }, + editor: { + service: { + parts: "Video Part", + montages: "Montase", + reels: "Reels / Klip Pendek", + documentaries: "Dokumenter", + contest: "Edit Kontes", + brand: "Video Brand / Promo", + motion: "Motion Graphics", + colorgrade: "Hanya Color Grading", + }, + serviceDesc: { + parts: "Video part skate penuh dengan soundtrack", + montages: "Edit kompilasi dari rekaman mentah", + reels: "Klip & reels media sosial 15-60 detik", + documentaries: "Film budaya skate yang berbasis cerita", + contest: "Edit rekap untuk kontes dan event", + brand: "Konten promosi untuk brand dan shop", + motion: "Judul, transisi, efek, dan grafis", + colorgrade: "Koreksi warna dan grading berbasis LUT", + }, + skill: { + premiere: "Adobe Premiere", + resolve: "DaVinci Resolve", + finalcut: "Final Cut Pro", + aftereffects: "After Effects", + luts: "LUT Kustom", + vhs: "Estetika VHS / Retro", + "4k": "Alur Kerja 4K & RAW", + sound: "Sound Design / Mix", + }, + skillDesc: { + premiere: "Pengeditan Adobe Premiere Pro", + resolve: "Pengeditan & grading DaVinci Resolve", + finalcut: "Pengeditan Final Cut Pro", + aftereffects: "Motion graphics dan compositing", + luts: "Pengembangan tampilan warna kustom", + vhs: "Glitch VHS, super-8, tampilan film retro", + "4k": "Alur kerja kamera RAW/LOG resolusi tinggi", + sound: "Sinkronisasi musik, SFX, mastering audio", + }, + }, + photo: { + service: { + action: "Aksi / Bidikan Trik", + sequence: "Bidikan Sekuens", + portraits: "Potret", + editorial: "Editorial / Majalah", + product: "Fotografi Produk / Shop", + events: "Liputan Event", + lifestyle: "Lifestyle / Dokumenter", + prints: "Cetakan & Zine", + }, + serviceDesc: { + action: "Foto momen puncak trik dan line", + sequence: "Sekuens trik multi-frame", + portraits: "Potret rider dan foto tim", + editorial: "Spread editorial siap majalah", + product: "Fotografi deck, gear, dan produk shop", + events: "Liputan comp, jam, dan premiere", + lifestyle: "Dokumenter balik layar dan budaya", + prints: "Cetakan fisik, zine, dan buku foto", + }, + camera: { + dslr: "DSLR", + mirrorless: "Mirrorless", + medium: "Format Medium", + film35: "Film 35mm", + filmmedium: "Film Format Medium", + point: "Point & Shoot", + phone: "Ponsel", + }, + lens: { + fisheye: "Fisheye", + wide: "Sudut Lebar", + standard: "Standar / Prime", + telephoto: "Telephoto / Lensa Panjang", + macro: "Makro", + zoom: "Zoom", + }, + lighting: { + strobes: "Strobe Studio", + speedlights: "Speedlight / Flash", + profoto: "Profoto", + elinchrom: "Elinchrom", + godox: "Godox", + triggers: "Pemicu Jarak Jauh", + continuous: "Continuous / LED", + reflectors: "Reflektor / Diffuser", + naturallight: "Hanya Cahaya Alami", + }, + support: { + tripod: "Tripod", + monopod: "Monopod", + lightstands: "Stand Lampu", + gimbal: "Gimbal", + bag: "Rig Seluler / Tas", + laptop: "Tethering di Lokasi", + }, + style: { + flashfisheye: "Flash Fisheye", + natural: "Cahaya Alami", + bw: "Hitam & Putih", + film: "Estetika Film", + longlens: "Lensa Panjang", + studio: "Studio / Berpencahayaan", + street: "Street / Dokumenter", + }, + }, + builder: { + service: { + diy: "Spot DIY", + concrete: "Taman Beton", + wood: "Ramp Kayu", + bowls: "Bowl & Kolam", + transitions: "Transisi & Quarter", + rails: "Rail & Ledge", + boxes: "Manny Pad & Box", + minis: "Mini Ramp", + pumptrack: "Pump Track", + foam: "Foam Pit / Indoor", + repairs: "Perbaikan & Pelapisan Ulang", + design: "Desain & Konsultasi", + }, + serviceDesc: { + diy: "Spot DIY komunitas dan pembangunan gerilya", + concrete: "Skatepark beton cor dan fiturnya", + wood: "Ramp kayu, launch box, dan rintangan", + bowls: "Bowl, kolam, dan transisi dalam", + transitions: "Quarterpipe, bank, dan transisi", + rails: "Rail baja, ledge, dan fitur grind", + boxes: "Manny pad, funbox, dan fitur street", + minis: "Mini ramp dan setup halaman belakang", + pumptrack: "Pump track dan alur flow", + foam: "Foam pit, resi, dan fitur latihan indoor", + repairs: "Memperbaiki, menambal, dan melapisi ulang spot yang ada", + design: "Rencana, gambar, dan konsultasi pembangunan", + }, + skill: { + concretework: "Beton / Shotcrete", + welding: "Pengelasan / Fabrikasi Baja", + carpentry: "Pertukangan / Kayu", + formwork: "Bekisting & Besi Beton", + masonry: "Pasangan Batu / Blok", + coping: "Coping (kolam / baja)", + surfacing: "Skatelite / Pelapisan", + earthworks: "Pekerjaan Tanah / Penggalian", + }, + scale: { + backyard: "Halaman Belakang / Mini", + diycommunity: "DIY Komunitas", + publicpark: "Taman Publik Penuh", + indoor: "Fasilitas Indoor", + event: "Event / Arena Kontes", + }, + }, + artist: { + service: { + boardart: "Grafis Deck", + logos: "Logo & Branding", + posters: "Poster & Flyer", + merch: "Merch & Pakaian", + zines: "Zine & Cetak", + illustration: "Ilustrasi", + stickers: "Stiker & Decal", + webdesign: "Web / Digital", + typography: "Tipografi / Lettering", + animation: "Animasi / Motion", + }, + serviceDesc: { + boardart: "Grafis deck dan seni griptape", + logos: "Identitas merek, logo, dan wordmark", + posters: "Poster event, flyer, dan seni gig", + merch: "Grafis kaos, hoodie, dan pakaian", + zines: "Zine, editorial, dan tata letak cetak", + illustration: "Ilustrasi kustom dan karya karakter", + stickers: "Paket stiker, decal, dan slap", + webdesign: "Situs web, digital, dan UI", + typography: "Lettering tangan dan tipografi kustom", + animation: "Motion graphics dan animasi", + }, + medium: { + digital: "Digital / Vektor", + handdrawn: "Gambar Tangan", + screenprint: "Screen Print", + paint: "Cat / Akrilik", + collage: "Kolase / Campuran", + photo: "Foto / Photoshop", + "3d": "3D / Render", + }, + tool: { + illustrator: "Adobe Illustrator", + photoshop: "Adobe Photoshop", + procreate: "Procreate", + affinity: "Affinity", + figma: "Figma", + blender: "Blender", + aftereffects: "After Effects", + clipstudio: "Clip Studio", + }, + }, + graffiti: { + style: { + throwups: "Throw-up", + pieces: "Piece / Burner", + murals: "Mural", + characters: "Karakter", + lettering: "Lettering / Wildstyle", + stencil: "Stensil", + handstyles: "Handstyle / Tag", + "3dstyle": "Gaya 3D", + abstract: "Abstrak", + }, + styleDesc: { + throwups: "Isian dua warna cepat", + pieces: "Piece dan burner penuh warna", + murals: "Mural dan produksi skala besar", + characters: "Karya karakter dan figur", + lettering: "Struktur wildstyle dan huruf", + stencil: "Stensil dan seni jalanan", + handstyles: "Tag dan handstyle", + "3dstyle": "Lettering 3D dan anamorfik", + abstract: "Abstrak dan freestyle", + }, + medium: { + spray: "Kaleng Semprot", + rollers: "Roller / Emulsi", + markers: "Marker / Tinta", + brush: "Kuas / Cat", + digital: "Digital / Procreate", + }, + context: { + legalwalls: "Dinding Legal", + commissions: "Komisi", + liveart: "Melukis Langsung", + skateparks: "Mural Skatepark", + interiors: "Interior / Shop", + workshops: "Lokakarya", + }, + }, + tattoo: { + style: { + traditional: "Traditional / Old School", + neotraditional: "Neo-Traditional", + fineline: "Fine Line", + blackwork: "Blackwork", + realism: "Realisme", + lettering: "Lettering / Script", + illustrative: "Ilustratif", + skateflash: "Skate Flash", + ignorant: "Gaya Ignorant / Handpoke", + japanese: "Jepang / Irezumi", + }, + styleDesc: { + traditional: "Garis tebal, Americana klasik", + neotraditional: "Traditional dengan detail modern", + fineline: "Karya jarum tunggal yang halus", + blackwork: "Hitam pekat dan pola", + realism: "Fotorealistis dan potret", + lettering: "Script, lettering, dan kutipan", + illustrative: "Ilustratif dan grafis", + skateflash: "Desain flash budaya skate", + ignorant: "Gaya handpoke ignorant / naif", + japanese: "Traditional Jepang / irezumi", + }, + method: { + machine: "Mesin", + handpoke: "Hand-Poke / Stick & Poke", + flash: "Flash Tersedia", + custom: "Desain Kustom", + coverup: "Cover-up", + }, + }, + trainer: { + focus: { + strength: "Kekuatan & Kondisi Fisik", + mobility: "Mobilitas & Kelenturan", + injuryprevention: "Pencegahan Cedera", + rehab: "Rehab / Fisioterapi", + recovery: "Pemulihan & Bodywork", + balance: "Keseimbangan & Stabilitas", + cardio: "Kardio / Daya Tahan", + nutrition: "Panduan Nutrisi", + }, + focusDesc: { + strength: "Membangun kekuatan dan tenaga untuk skate", + mobility: "Rentang gerak dan kelenturan", + injuryprevention: "Prehab dan mengurangi risiko cedera", + rehab: "Fisioterapi dan rehab pasca cedera", + recovery: "Pijat, bodywork, dan pemulihan", + balance: "Proprioception, keseimbangan, dan stabilitas", + cardio: "Kondisi fisik dan daya tahan", + nutrition: "Saran bahan bakar dan nutrisi", + }, + injury: { + ankles: "Pergelangan Kaki", + knees: "Lutut", + wrists: "Pergelangan Tangan", + hips: "Pinggul", + back: "Punggung / Tulang Belakang", + shoulders: "Bahu", + heelbruise: "Memar Tumit", + concussion: "Protokol Gegar Otak", + }, + credential: { + physio: "Fisioterapis Berlisensi", + osteo: "Osteopat", + certtrainer: "Pelatih Bersertifikat", + sportstherapist: "Terapis Olahraga", + massage: "Terapis Pijat", + inperson: "Tatap Muka", + remote: "Jarak Jauh / Online", + }, + }, + musician: { + genre: { + punk: "Punk", + hardcore: "Hardcore", + metal: "Metal", + rock: "Rock", + indie: "Indie / Alt", + hiphop: "Hip-Hop / Rap", + electronic: "Elektronik", + lofi: "Lo-Fi / Beats", + reggae: "Reggae / Dub", + ska: "Ska", + jazz: "Jazz", + funk: "Funk / Soul", + flamenco: "Flamenco", + folk: "Folk / Akustik", + experimental: "Eksperimental", + grunge: "Grunge", + }, + instrument: { + vocals: "Vokal", + guitar: "Gitar", + bass: "Bass", + drums: "Drum", + keys: "Keys / Synth", + dj: "DJ / Turntable", + producer: "Produser / Beats", + sax: "Saksofon / Brass", + strings: "Senar", + other: "Lainnya", + }, + act: { + solo: "Artis Solo", + band: "Band", + dj: "DJ", + producer: "Produser", + collective: "Kolektif", + }, + }, + judge: { + format: { + game_of_skate: "Game of S.K.A.T.E.", + best_trick: "Best Trick", + jam: "Format Jam", + contest: "Kontes / Comp", + street_league: "Gaya Street League", + bowl: "Bowl / Vert", + mini_ramp: "Mini Ramp", + park: "Park", + street: "Street", + freestyle: "Freestyle", + world_tour: "World Destruction Tour", + am_series: "Seri Am / Kualifikasi", + local_jam: "Jam Lokal / Akar Rumput", + online: "Kontes Online / IG", + }, + specialty: { + head_judge: "Juri Utama", + scoring: "Penilaian / Tabulasi", + mc: "MC / Pembawa Acara", + format_design: "Desain Format", + rules: "Aturan / Perwasitan", + brackets: "Bracket / Babak", + livestream: "Penjurian Livestream", + am_scout: "Pemanduan Bakat Am", + }, + level: { + local: "Lokal", + regional: "Regional", + national: "Nasional", + international: "Internasional", + pro: "Sirkuit Pro", + }, + }, + organizer: { + event: { + street_jam: "Street Jam", + best_trick: "Best Trick", + game_of_skate: "Game of S.K.A.T.E.", + contest: "Kontes / Comp", + bowl: "Bowl / Vert", + mini_ramp: "Mini Ramp", + park: "Sesi Park", + demo: "Demo Pro", + clinic: "Klinik / Lokakarya", + meetup: "Kopdar / Cruise", + downhill: "Downhill / Balapan", + slalom: "Slalom", + kids: "Anak / Remaja", + charity: "Amal / Penggalangan Dana", + tour_stop: "Singgahan Tour", + premiere: "Premiere Video", + market: "Market / Pameran Seni", + }, + service: { + organizing: "Penyelenggaraan Penuh", + hosting: "Menjadi Tuan Rumah / MC", + permits: "Izin & Dewan Kota", + sponsorship: "Sponsor / Kesepakatan Brand", + promotion: "Promosi & Pemasaran", + livestream: "Livestream / Liputan", + sound: "Suara & Musik", + ramps: "Ramp & Rintangan", + safety: "Keselamatan & P3K", + vendors: "Makanan & Pedagang", + media: "Liputan Foto / Video", + registration: "Pendaftaran & Bracket", + }, + scale: { + grassroots: "Akar Rumput", + local: "Lokal", + regional: "Regional", + national: "Nasional", + international: "Internasional", + pro: "Sirkuit Pro", + }, + }, + barber: { + service: { + haircut: "Potong Rambut", + fade: "Fade", + beard: "Potong Jenggot", + lineup: "Line-up / Shape-up", + colour: "Warna & Pewarna", + kids: "Potongan Anak", + }, + serviceDesc: { + haircut: "Potongan klasik — clipper dan gunting.", + fade: "Fade bertingkat — rendah, sedang, atau tinggi.", + beard: "Potong, bentuk, dan rapikan jenggot.", + lineup: "Rapi di sekitar garis rambut dan leher.", + colour: "Warna, bleaching, pewarna, dan toning.", + kids: "Potongan sabar untuk skater muda.", + }, + style: { + skin_fade: "Skin Fade", + taper: "Taper", + buzz: "Potongan Cepak", + mohawk: "Mohawk", + mullet: "Mullet", + curly: "Keriting / Afro", + long: "Rambut Panjang / Layer", + classic: "Potongan Gunting Klasik", + }, + setting: { + shop: "Shop / Barbershop", + mobile: "Keliling / Panggilan ke Rumah", + event: "Event & Comp Skate", + }, + }, + tour: { + skill: { + beginner: { + label: "Pemula", + description: "Baru mengenal skate atau trik dasar", + }, + intermediate: { + label: "Menengah", + description: "Nyaman dengan sebagian besar medan", + }, + advanced: { + label: "Mahir", + description: "Skater berpengalaman, spot ganas", + }, + all: { + label: "Semua Tingkat", + description: "Cocok untuk semua orang", + }, + }, + }, + }, +}; export default idBatch6; diff --git a/src/i18n/id/batch7.ts b/src/i18n/id/batch7.ts index 73f241c..8a4f78d 100644 --- a/src/i18n/id/batch7.ts +++ b/src/i18n/id/batch7.ts @@ -1,4 +1,908 @@ -/** id — batch 7. Filled by the translation pass; empty until then. */ -const idBatch7 = {}; +/** id — batch 7. Filled by the translation pass. */ +const idBatch7 = { + events: { + title: "Event Skate", + createEvent: "Buat Event", + editEvent: "Edit Event", + eventDetails: "Detail Event", + eventName: "Nama Event", + eventType: "Jenis Event", + date: "Tanggal", + time: "Waktu", + startDate: "Tanggal Mulai", + endDate: "Tanggal Selesai", + venue: "Tempat", + organizer: "Penyelenggara", + attendees: "Peserta", + going: "Hadir", + interested: "Tertarik", + rsvp: "RSVP", + ticketPrice: "Harga Tiket", + freeEntry: "Gratis Masuk", + register: "Daftar", + moreInfo: "Info Lainnya", + upcomingEvents: "Akan Datang", + pastEvents: "Lalu", + noEvents: "Tidak ada event ditemukan", + findEvents: "Temukan kontes, demo, sesi, dan lainnya", + searchPlaceholder: "Cari event...", + loginToCreate: "Masuk untuk membuat event", + noEventsMatch: "Tidak ada event mendatang yang cocok dengan filter Anda.", + noUpcoming: "Tidak ada event mendatang ditemukan.", + noPast: "Tidak ada event lalu ditemukan.", + types: { + contest: "Kontes", + session: "Sesi", + meetup: "Kopdar", + premiere: "Premiere Video", + workshop: "Workshop", + demo: "Demo", + jam: "Jam", + }, + }, + wallet: { + title: "Dompet", + balance: "Saldo", + send: "Kirim", + receive: "Terima", + transactions: "Transaksi", + history: "Riwayat", + noTransactions: "Belum ada transaksi", + sendSats: "Kirim Sats", + receiveSats: "Terima Sats", + amount: "Jumlah", + recipient: "Penerima", + lightning: "Lightning", + onChain: "On-chain", + invoice: "Invoice", + address: "Alamat", + scanQR: "Pindai QR", + paste: "Tempel", + payInvoice: "Bayar Invoice", + createInvoice: "Buat Invoice", + copied: "Disalin ke clipboard!", + insufficientFunds: "Saldo tidak cukup", + paymentSent: "Pembayaran terkirim!", + paymentReceived: "Pembayaran diterima!", + cashu: { + title: "Dompet Cashu", + tokens: "Token", + mint: "Mint", + mints: "Mint", + manageMints: "Kelola Mint", + addMint: "Tambah Mint", + removeMint: "Hapus Mint", + defaultMint: "Mint Default", + backup: "Backup", + restore: "Pulihkan", + recoveryPhrase: "Frasa Pemulihan", + viewRecoveryPhrase: "Lihat Frasa Pemulihan", + seedWarning: "Ini seperti nsec Nostr Anda - jaga kerahasiaannya dan cadangkan!", + }, + }, + spots: { + addSpot: "Tambah Spot", + editSpot: "Edit Spot", + spotDetails: "Detail Spot", + spotName: "Nama Spot", + spotType: "Jenis Spot", + description: "Deskripsi", + location: "Lokasi", + address: "Alamat", + photos: "Foto", + addPhotos: "Tambah Foto", + obstacles: "Rintangan", + features: "Fitur", + bustLevel: "Tingkat Bust", + bestTime: "Waktu Terbaik", + tips: "Tips", + reviews: "Ulasan", + addReview: "Tambah Ulasan", + reportSpot: "Laporkan Spot", + directions: "Rute", + shareSpot: "Bagikan Spot", + createdBy: "Dibuat oleh", + lastUpdated: "Terakhir diperbarui", + types: { + park: "Skatepark", + street: "Street Spot", + diy: "DIY Spot", + plaza: "Plaza", + indoor: "Indoor", + bowl: "Bowl", + vert: "Vert", + miniramp: "Mini Ramp", + }, + bustLevels: { + chill: "Santai", + moderate: "Sedang", + sketchy: "Rawan", + heavy: "Ketat", + }, + }, + settings: { + title: "Pengaturan", + profile: "Profil", + editProfile: "Edit Profil", + account: "Akun", + security: "Keamanan", + relays: "Relay", + appearance: "Tampilan", + language: "Bahasa", + notifications: "Notifikasi", + privacy: "Privasi", + about: "Tentang", + help: "Bantuan", + feedback: "Masukan", + version: "Versi", + displayName: "Nama Tampilan", + username: "Nama Pengguna", + bio: "Bio", + website: "Situs Web", + lightningAddress: "Alamat Lightning", + profilePicture: "Foto Profil", + banner: "Banner", + saveProfile: "Simpan Profil", + backupKeys: "Cadangkan Kunci", + exportKeys: "Ekspor Kunci", + secretKey: "Kunci Rahasia", + publicKey: "Kunci Publik", + showSecretKey: "Tampilkan Kunci Rahasia", + hideSecretKey: "Sembunyikan Kunci Rahasia", + copyKey: "Salin Kunci", + keysBackedUp: "Anda telah mengonfirmasi bahwa kunci Anda tersimpan dengan aman.", + keysNotBackedUp: "Pastikan untuk mencadangkan frasa pemulihan atau kunci rahasia Anda!", + selectLanguage: "Pilih Bahasa", + english: "Inggris", + spanish: "Spanyol", + }, + createSpot: { + title: "Tambah Spot Skate", + subtitle: "Bagikan spot skateboard dengan komunitas", + backToMap: "Kembali ke Peta", + namePlaceholder: "mis. Hollywood High School", + descriptionPlaceholder: "Jelaskan spot, rintangan, waktu terbaik untuk skate, info keamanan, dll.", + addressPlaceholder: "mis. 1521 N Highland Ave, Los Angeles, CA", + selectType: "Pilih jenis spot", + selectBustLevel: "Pilih tingkat bust", + uploadPhotos: "Unggah", + dragDrop: "Seret dan lepas atau klik untuk mengunggah", + maxPhotos: "Maks 5 foto", + publishing: "Menerbitkan...", + success: "Spot berhasil diterbitkan!", + error: "Gagal menerbitkan spot", + locationRequired: "Silakan pilih lokasi di peta", + useCurrentLocation: "Gunakan lokasi saya saat ini", + pickOnMap: "Pilih Lokasi di Peta", + loginToAdd: "Anda harus masuk untuk menambahkan spot skate.", + locationLabel: "Lokasi", + tapToPlace: "Ketuk peta untuk meletakkan pin, atau seret untuk menyempurnakan.", + manualCoords: "Masukkan koordinat secara manual", + moreDetails: "Detail lainnya (opsional)", + photoHint: "foto diperlukan untuk menerbitkan", + nameRequired: "Silakan masukkan nama untuk spot ini.", + descriptionRequired: "Silakan jelaskan spot ini.", + addressRequired: "Silakan tambahkan alamat atau nama area.", + photoRequired: "Silakan tambahkan setidaknya satu foto.", + draftTitle: "Anda memiliki draf yang belum disimpan", + draftBody: "Lanjutkan dari tempat Anda berhenti, atau buang.", + draftResume: "Lanjutkan", + draftDiscard: "Buang draf", + requiredFields: "Ceritakan tentang spot ini. Semua kolom bertanda * wajib diisi.", + coordinates: "Koordinat", + latitudePlaceholder: "Lintang (mis. 34.1012)", + longitudePlaceholder: "Bujur (mis. -118.3389)", + gettingLocation: "Mendapatkan lokasi...", + accessType: "Jenis Akses", + publicTitle: "Publik - Terbuka untuk Semua", + publicDesc: "Skatepark, plaza publik, street spot", + privateTitle: "Properti Pribadi - Perlu Izin", + privateDesc: "Ramp halaman belakang, tanah pribadi, spot berpagar", + localsTitle: "Tanya Warga Lokal Dulu", + localsDesc: "Hormati spot, jangan rampas", + contactInfo: "Info Kontak", + contactPlaceholder: "mis. Nomor telepon, Instagram, email...", + contactHintPrivate: "Bagaimana orang harus menghubungi Anda untuk izin?", + contactHintLocals: "Bagaimana orang harus menghubungi untuk bertanya tentang spot?", + }, + marketplace: { + title: "Marketplace", + subtitle: "Beli, jual, dan tukar Gear skate", + addListing: "Tambah Listing", + condition: "Kondisi", + conditions: { + new: "Baru", + likeNew: "Seperti Baru", + good: "Bagus", + fair: "Cukup", + poor: "Buruk", + }, + categories: { + all: "Semua", + decks: "Deck", + trucks: "Truck", + wheels: "Roda", + bearings: "Bearing", + shoes: "Sepatu", + clothing: "Pakaian", + protection: "Pelindung", + other: "Lainnya", + }, + priceRange: "Rentang Harga", + location: "Lokasi", + seller: "Penjual", + contact: "Hubungi Penjual", + makeOffer: "Ajukan Penawaran", + sold: "Terjual", + available: "Tersedia", + gear: "Gear", + sellGear: "Jual Gear", + wantToBuy: "Ingin Beli", + }, + auth: { + login: "Masuk", + logout: "Keluar", + signUp: "Daftar", + signUpTitle: "Baru di Nostr?", + signUpDesc: "Buat akun baru untuk memulai. Gratis dan terbuka.", + orLogIn: "Atau masuk", + loginWithExtension: "Masuk dengan Ekstensi", + loginWithAmber: "Masuk dengan Amber (Android)", + loginWithKey: "Kunci Rahasia (nsec) atau Frasa Pemulihan", + loginWithBunker: "Masuk dengan Nostr Connect", + bunkerUri: "String Koneksi Bunker", + openAmber: "Buka Amber", + connectToBunker: "Hubungkan ke Bunker", + noExtension: "Tidak ada ekstensi terdeteksi.", + extensionHelp: "Coba gunakan tombol Daftar di atas untuk membuat akun baru, atau gunakan tab Amber, Kunci, atau Bunker jika Anda sudah memiliki kredensial.", + amberDesc: "Amber adalah aplikasi penandatangan Nostr yang aman untuk perangkat Android. Klik tombol di bawah untuk membuka Amber dan mengotorisasi akses.", + bunkerDesc: "Akses akun Anda dari perangkat mana pun menggunakan penandatangan jarak jauh (bunker). Kunci Anda tetap aman di server, tidak pernah terekspos ke situs web.", + keyPlaceholder: "nsec1... atau frasa pemulihan 12 kata Anda", + keyHint: "Anda dapat menempelkan kunci nsec atau frasa pemulihan 12 kata", + uploadKeyFile: "Unggah File Kunci Anda", + loggingIn: "Sedang masuk...", + connecting: "Menghubungkan...", + verifying: "Memverifikasi...", + }, + createEvent: { + title: "Buat Event", + subtitle: "Selenggarakan event skateboard untuk komunitas", + backToEvents: "Kembali ke Event", + namePlaceholder: "mis. Sesi Skate Musim Panas", + descriptionPlaceholder: "Jelaskan event, apa yang diharapkan, aturan, hadiah, dll.", + selectType: "Pilih jenis event", + venuePlaceholder: "mis. Venice Beach Skatepark, CA", + selectDate: "Pilih tanggal", + selectTime: "Pilih waktu", + ticketPricePlaceholder: "Biarkan kosong untuk event gratis", + publishing: "Menerbitkan...", + success: "Event berhasil diterbitkan!", + error: "Gagal menerbitkan event", + loginToCreate: "Anda harus masuk untuk membuat event.", + requiredFields: "Ceritakan tentang event ini. Semua kolom bertanda * wajib diisi.", + startDateTime: "Tanggal & Waktu Mulai", + endDateTime: "Tanggal & Waktu Selesai (opsional)", + coordinatesOptional: "Koordinat (opsional)", + coverImage: "Gambar Sampul", + uploadCover: "Unggah gambar sampul", + nip05Recommended: "Verifikasi NIP-05 Direkomendasikan", + nip05Desc: "Tambahkan pengenal NIP-05 ke profil Anda untuk memverifikasi identitas dan membangun kepercayaan dengan peserta.", + addNip05: "Tambahkan NIP-05 di Pengaturan", + }, + labPage: { + title: "The Lab", + subtitle: "Pelajari trik. Abadikan momen. Terhubung dengan Skater lain", + coachesTab: "Coaching", + filmersTab: "Filming", + offerCoaching: "TAWARKAN COACHING", + offerFilming: "TAWARKAN FILMING", + loginToOffer: "Masuk untuk menawarkan layanan", + whatToLearn: "APA YANG INGIN KAMU PELAJARI?", + whatContent: "JENIS KONTEN APA?", + selectSkillsDesc: "Pilih keterampilan dan kami akan mencocokkan Anda dengan coach", + selectFilmingDesc: "Pilih layanan filming yang Anda cari", + searchPlaceholder: "Cari berdasarkan nama, lokasi, atau keterampilan...", + noServicesYet: "BELUM ADA LAYANAN", + beFirstToOffer: "Jadilah yang pertama menawarkan layanan coaching atau filming kepada komunitas!", + skills: "Keterampilan", + rate: "Tarif", + perHour: "/jam", + contact: "Kontak", + viewProfile: "Lihat Profil", + noProfilesYet: "Belum ada profil", + beFirstCoach: "Jadilah yang pertama mendaftar sebagai coach!", + beFirstFilmer: "Jadilah yang pertama mendaftar sebagai filmer!", + yearsExperience: "tahun pengalaman", + }, + skills: { + kickflip: "Kickflip", + heelflip: "Heelflip", + ollie: "Ollie", + treflip: "360 Flip", + shuvit: "Shuvit", + hardflip: "Hardflip", + varial: "Varial", + nollie: "Nollie", + fakie: "Fakie", + switch: "Switch", + grind: "Grind", + slide: "Slide", + manual: "Manual", + transition: "Transition", + bowl: "Bowl", + vert: "Vert", + street: "Street", + flatground: "Flatground", + }, + lab: { + title: "The Lab", + subtitle: "Tingkatkan kemampuan skate Anda", + coaches: "Coach", + filmers: "Filmer", + findCoach: "Cari Coach", + becomeCoach: "Jadi Coach", + findFilmer: "Cari Filmer", + becomeFilmer: "Jadi Filmer", + hourlyRate: "Tarif per Jam", + experience: "Pengalaman", + specialties: "Spesialisasi", + availability: "Ketersediaan", + bookSession: "Pesan Sesi", + contactCoach: "Hubungi Coach", + noCoaches: "Tidak ada coach ditemukan di area Anda", + noFilmers: "Tidak ada filmer ditemukan di area Anda", + }, + shops: { + title: "Skate Shop", + addShop: "Tambah Shop", + editShop: "Edit Shop", + shopDetails: "Detail Shop", + shopName: "Nama Shop", + hours: "Jam Buka", + phone: "Telepon", + website: "Situs Web", + services: "Layanan", + brands: "Merek", + supportLocal: "Dukung Lokal", + nip05: "Shop NIP-05", + nip05Hint: "Handle opsional yang Anda kendalikan untuk shop ini (mis. shop@yourdomain.com), diverifikasi terhadap kunci Anda. Tambahkan hingga 5.", + }, + becomeFilmer: { + title: "Jadi Filmer", + subtitle: "Abadikan klip terbaik untuk komunitas", + bioPlaceholder: "Ceritakan tentang pengalaman dan peralatan filming Anda...", + specialtiesPlaceholder: "mis. fisheye, lensa panjang, drone, editing", + selectSpecialties: "Pilih spesialisasi Anda", + hourlyRate: "Tarif per Jam (sats)", + ratePlaceholder: "mis. 5000", + locationPlaceholder: "Kota atau area Anda", + portfolioUrl: "URL Portofolio", + portfolioPlaceholder: "Tautan ke karya Anda (YouTube, Instagram, dll.)", + publishing: "Menerbitkan profil...", + success: "Profil filmer dibuat!", + error: "Gagal membuat profil", + }, + food: { + title: "Spot Kuliner", + subtitle: "Isi energi sebelum atau setelah sesi Anda", + addFood: "Tambah Spot Kuliner", + categories: { + all: "Semua", + burgers: "Burger", + pizza: "Pizza", + tacos: "Taco", + coffee: "Kopi", + drinks: "Minuman", + snacks: "Camilan", + }, + skaterFriendly: "Ramah Skater", + nearSpots: "Dekat Spot Skate", + }, + profile: { + posts: "Postingan", + spots: "Spot", + events: "Event", + following: "Mengikuti", + followers: "Pengikut", + editProfile: "Edit Profil", + follow: "Ikuti", + unfollow: "Berhenti Ikuti", + noPostsYet: "Belum ada postingan", + noBio: "Belum ada bio", + zapProfile: "Zap skater ini", + }, + becomeCoach: { + title: "Jadi Coach", + subtitle: "Bagikan keterampilan Anda dan bantu skater lain berkembang", + bioPlaceholder: "Ceritakan tentang latar belakang skate dan gaya mengajar Anda...", + skillsPlaceholder: "mis. kickflip, heelflip, grind, bowl", + selectSkills: "Pilih keterampilan yang bisa Anda ajarkan", + hourlyRate: "Tarif per Jam (sats)", + ratePlaceholder: "mis. 5000", + locationPlaceholder: "Kota atau area Anda", + publishing: "Menerbitkan profil...", + success: "Profil coach dibuat!", + error: "Gagal membuat profil", + }, + weather: { + title: "Cuaca", + current: "Kondisi Saat Ini", + forecast: "Prakiraan", + humidity: "Kelembapan", + wind: "Angin", + feelsLike: "Terasa seperti", + goodForSkating: "Bagus untuk skate!", + notIdeal: "Kondisi kurang ideal", + allWeather: "Semua Cuaca", + goodWeather: "Cuaca Bagus", + perfectWeather: "Cuaca Sempurna", + }, + errors: { + somethingWentWrong: "Terjadi kesalahan", + tryAgainLater: "Silakan coba lagi nanti", + notFound: "Tidak ditemukan", + pageNotFound: "Halaman tidak ditemukan", + unauthorized: "Tidak diizinkan", + loginRequired: "Silakan masuk untuk melanjutkan", + networkError: "Kesalahan jaringan", + checkConnection: "Silakan periksa koneksi internet Anda", + invalidInput: "Input tidak valid", + requiredField: "Kolom ini wajib diisi", + }, + time: { + today: "Hari ini", + yesterday: "Kemarin", + tomorrow: "Besok", + thisWeek: "Minggu ini", + nextWeek: "Minggu depan", + thisMonth: "Bulan ini", + justNow: "Baru saja", + minutesAgo: "{{count}} menit lalu", + hoursAgo: "{{count}} jam lalu", + daysAgo: "{{count}} hari lalu", + }, + spotDetail: { + postedBy: "Diposting oleh", + getDirections: "Dapatkan Rute", + reviews: "Ulasan", + noReviews: "Belum ada ulasan", + beFirstReview: "Jadilah yang pertama mengulas spot ini!", + writeReview: "Tulis Ulasan", + submitReview: "Kirim Ulasan", + rating: "Penilaian", + reviewPlaceholder: "Bagikan pengalaman Anda di spot ini...", + relatedSpots: "Spot Terdekat", + }, + eventDetail: { + organizedBy: "Diselenggarakan oleh", + eventInfo: "Info Event", + location: "Lokasi", + dateTime: "Tanggal & Waktu", + price: "Harga", + attendeeCount: "{{count}} hadir", + interested: "Tertarik", + going: "Hadir", + notGoing: "Tidak Hadir", + share: "Bagikan Event", + }, + venueAccess: { + title: "Pass akses", + desc: "Terbitkan pass bertanda tangan kepada rider agar mereka bisa membuktikan akses di pintu — mereka menunjukkan kartunya dan siapa pun dapat memindai QR untuk memverifikasinya.", + active: "{{count}} aktif", + revoked: "{{count}} dicabut", + issue: "Terbitkan pass", + verifyHint: "Diverifikasi dengan pemindaian — tidak perlu aplikasi atau akun untuk memeriksa.", + publicTitle: "Pass akses", + publicDesc: "Venue ini menerbitkan pass akses. Pindai kartu rider di pintu untuk memverifikasinya.", + badge: "Pass", + sellerHint: "Venue penjual ini menerbitkan pass akses", + }, + zaps: { + zapButton: "Zap", + sendZap: "Kirim Zap", + zapAmount: "Jumlah Zap", + customAmount: "Jumlah Kustom", + addMessage: "Tambah pesan (opsional)", + sending: "Mengirim...", + sent: "Zap terkirim!", + failed: "Zap gagal", + received: "Anda menerima zap!", + }, + rewards: { + title: "Hadiah", + yourPoints: "Poin Anda", + earnPoints: "Dapatkan Poin", + redeemPoints: "Tukar Poin", + leaderboard: "Papan Peringkat", + achievements: "Pencapaian", + dailyTasks: "Tugas Harian", + weeklyTasks: "Tugas Mingguan", + }, + errorsUi: { + slammedTitle: "Terjatuh", + slammedBody: "Ada yang mengganggu layar ini. Akun dan data Anda aman — mari kita mulai lagi.", + tryAgain: "Coba lagi", + reloadApp: "Muat ulang aplikasi", + pageSlammedTitle: "Halaman ini terjatuh", + pageSlammedBody: "Ada yang mengganggu layar ini. Akun dan data Anda aman. Biasanya muat ulang cepat menyelesaikannya.", + reload: "Muat ulang", + goBack: "Kembali", + }, + backup: { + title: "Simpan login Anda", + subtitle: "Butuh 10 detik — lakukan sekali", + message: "Kode pemulihan Anda adalah satu-satunya jalan kembali ke akun Anda. Simpan dan Anda bisa masuk di perangkat mana pun.", + warning: "Jika hilang, tidak ada reset — tanpa email, tanpa pemulihan kata sandi.", + backupNow: "Simpan sekarang", + confirmed: "Saya sudah menyimpannya", + remindLater: "Nanti", + }, + bootUi: { + ariaLoading: "Memuat SkateSpots", + ariaReady: "SkateSpots siap", + ready: "Siap", + statusWaking: "Membangunkan jaringan", + statusTuning: "Menyetel relay", + statusPulling: "Menarik spot", + statusDropping: "Masuk", + }, + footer: { + vibedWith: "Dibuat dengan", + poweredBy: "Didukung oleh", + openSource: "Open Source", + contribute: "Berkontribusi", + decentralized: "Terdesentralisasi", + communityOwned: "Milik Komunitas", + }, + role: { + owner: "Pemilik", + admin: "Admin", + organiser: "Penyelenggara", + verifiedOwner: "Pemilik terverifikasi", + }, + nfc: { + write: "Tulis ke tag NFC", + written: "Tag tertulis", + writtenDesc: "Ketuk tag ke ponsel untuk membuka halaman verifikasi.", + failed: "Tidak dapat menulis tag", + }, + collectionUi: { + namePlaceholder: "Trip Barcelona 2024", + descriptionPlaceholder: "Spot favorit saya dari trip Barcelona...", + }, + toastsUi: { + followingSuccess: "Berhasil mengikuti", + followingSuccessDesc: "Pengguna ini sekarang ada di jaringan Anda", + followFailed: "Gagal mengikuti", + unfollowSuccess: "Berhasil berhenti mengikuti", + unfollowSuccessDesc: "Dihapus dari jaringan Anda", + unfollowFailed: "Gagal berhenti mengikuti", + reportThanks: "Terima kasih — dikirim untuk ditinjau", + reportFailed: "Tidak dapat mengirim laporan", + savedOffline: "Disimpan offline", + savedOfflineDesc: "Kami akan menerbitkannya otomatis saat Anda kembali online.", + cacheCleaned: "Cache dibersihkan", + cacheCleanedDesc: "Menghapus {{count}} spot lama dari cache", + cacheCleared: "Cache dikosongkan", + cacheClearedDesc: "Semua spot yang di-cache telah dihapus", + backOnline: "Kembali online", + backOnlineDesc: "Mengirim {{count}} tindakan tersimpan.", + postQueued: "Postingan dalam antrean", + postQueuedDesc: "Postingan Anda akan diterbitkan saat Anda kembali online", + invalidIdentifier: "Pengenal tidak valid. Gunakan npub1..., user@domain.com, atau pubkey hex", + notASpotThanks: "Terima kasih — dikirim untuk ditinjau", + notASpotThanksDesc: "Tidak masalah: ini menandai pin sebagai di luar topik agar orang bisa memutuskan sendiri.", + notASpotFailed: "Tidak dapat mengirim laporan", + pleaseTryAgain: "Silakan coba lagi.", + relayUnreachable: "Tidak dapat menjangkau relay mana pun — periksa koneksi Anda dan coba lagi.", + loginToReport: "Masuk untuk melaporkan spot.", + zapLoginRequired: "Perlu masuk", + zapLoginRequiredDesc: "Anda harus masuk untuk mengirim zap.", + zapEventNotFound: "Event tidak ditemukan", + zapEventNotFoundDesc: "Tidak dapat menemukan event untuk di-zap.", + zapAuthorNotFound: "Penulis tidak ditemukan", + zapAuthorNotFoundDesc: "Tidak dapat menemukan penulis item ini.", + zapSuccess: "Zap berhasil!", + zapSuccessNwcDesc: "Anda mengirim {{amount}} sats melalui NWC ke penulis.", + zapSuccessDesc: "Anda mengirim {{amount}} sats ke penulis.", + zapStatusUnknown: "Status pembayaran tidak diketahui", + zapStatusUnknownDesc: "Dompet Anda mungkin masih menyelesaikan zap ini. Periksa dompet Anda sebelum mencoba lagi — jangan bayar dua kali.", + zapNwcFailed: "Pembayaran NWC gagal", + zapWeblnFailed: "Pembayaran WebLN gagal", + zapFallingBack: "{{error}}. Beralih ke metode pembayaran lain...", + zapFailed: "Zap gagal", + zapUnknownNwcError: "Kesalahan NWC tidak diketahui", + zapUnknownWeblnError: "Kesalahan WebLN tidak diketahui", + nwcInvalidUri: "URI NWC tidak valid", + nwcInvalidUriDesc: "Silakan periksa string koneksi dan coba lagi.", + nwcExists: "Koneksi sudah ada", + nwcExistsDesc: "Dompet ini sudah terhubung.", + nwcConnected: "Dompet terhubung", + nwcConnectedDesc: "Berhasil terhubung ke {{alias}}.", + nwcFailed: "Koneksi gagal", + nwcFailedDesc: "Tidak dapat terhubung ke dompet: {{error}}", + nwcUnknownError: "Terjadi kesalahan tidak diketahui", + nwcDisconnected: "Dompet terputus", + nwcDisconnectedDesc: "Koneksi dompet telah dihapus.", + deleteApproveAmber: "Setujui di Amber", + deleteApproveAmberDesc: "Amber akan terbuka — ketuk Setujui untuk mengonfirmasi penghapusan.", + deleteCancelled: "Dibatalkan", + deleteCancelledDesc: "Anda menolak permintaan di Amber.", + deleteCouldntSign: "Tidak dapat menandatangani", + deletePublishing: "Langkah 2/2: Menerbitkan…", + deletePublishingDesc: "Mengirim penghapusan ke relay.", + deleteStuck: "Terjebak di MENERBITKAN", + deleteStuckDesc: "Langkah relay gagal: {{error}}. Sudah ditandatangani dengan benar; relay tidak mengonfirmasi.", + stashMerged: "Menggabungkan perubahan dari perangkat lain", + stashMergedDesc: "Stash Anda diedit di tempat lain — kedua set perubahan tetap disimpan.", + statusUpdated: "Status diperbarui!", + statusUpdatedDesc: "Status skate Anda sekarang terlihat oleh orang lain.", + statusFailed: "Gagal menyetel status", + statusCleared: "Status dihapus", + statusClearedDesc: "Status Anda telah dihapus.", + statusClearFailed: "Gagal menghapus status", + nutzapEnabled: "Penerimaan Nutzap diaktifkan", + nutzapEnabledDesc: "Anda sekarang dapat menerima zap ecash!", + nutzapSetupFailed: "Pengaturan gagal", + nutzapUnavailable: "Pengiriman Nutzap tidak tersedia", + tokenReceived: "Token diterima", + tokenReceivedDesc: "Token Cashu berhasil ditukar!", + receiveFailed: "Penerimaan gagal", + invalidAmount: "Jumlah tidak valid", + invalidAmountDesc: "Silakan masukkan jumlah yang valid", + tokenCreated: "Token dibuat", + sendFailed: "Pengiriman gagal", + mintAdded: "Mint ditambahkan", + mintAddedDesc: "Mint ditambahkan dan dipercaya dengan sukses", + mintAddFailed: "Gagal menambahkan mint", + mintRemoved: "Mint dihapus", + mintRemoveFailed: "Gagal menghapus mint", + paymentReceived: "Pembayaran diterima", + paymentReceivedDesc: "Berhasil menerima {{amount}} sats!", + paymentSent: "Pembayaran terkirim", + paymentSentDesc: "Pembayaran Lightning berhasil diselesaikan", + loginRequired: "Perlu Masuk", + loginToFollowFounder: "Silakan masuk untuk mengikuti pendiri", + alreadyFollowing: "Sudah Mengikuti", + alreadyFollowingDesc: "Anda sudah mengikuti {{name}}!", + couldNotComplete: "Tidak dapat menyelesaikan itu", + tryAgainLower: "Coba lagi.", + couldNotLoadProfile: "Tidak dapat memuat profil", + couldNotLoadProfileDesc: "Periksa koneksi internet Anda dan coba segarkan.", + undone: "Dibatalkan", + undoneDesc: "Kembali ke netral — tidak disembunyikan, tidak divouch.", + confirmed: "Dikonfirmasi", + confirmedDesc: "Diberi jaminan — keluar dari antrean ini.", + hiddenToast: "Disembunyikan", + couldNotUndo: "Tidak dapat membatalkan", + couldNotConfirm: "Tidak dapat mengonfirmasi", + deleteFailed: "Gagal menghapus", + somethingWentWrong: "Terjadi kesalahan", + }, + seoUi: { + becomeBuilderTitle: "Jadi Pembangun - SkateSpots", + becomeBuilderDesc: "Cantumkan layanan pembangunan ramp, park, dan DIY Anda — apa yang Anda bangun, material, dan skalanya.", + tradesTitle: "Perdagangan Saya — SkateSpots", + tradesDesc: "Kelola perdagangan marketplace Anda, konfirmasi, dan reputasi.", + eventsTitle: "Event & Tur Skate - SkateSpots", + eventsDesc: "Temukan event skateboard, kompetisi, tur, dan sesi di dekat Anda.", + editShopDesc: "Edit skate shop Anda.", + createTourDesc: "Selenggarakan tur skate - tur permata tersembunyi lokal, perjalanan darat nasional, petualangan internasional, atau kompetisi kehancuran ala KOTR.", + deckDesignerTitle: "Desainer Deck — SkateSpots DIY", + deckDesignerDesc: "Desain garis besar skateboard atau longboard, lalu ekspor templat 1:1 yang dapat dicetak, SVG atau DXF — termasuk concave, kick, wheelbase, dan lubang truck.", + createEventTitle: "Buat Event Skate - SkateSpots", + createEventDesc: "Buat event skateboard baru untuk komunitas.", + editTourDesc: "Edit tur skate Anda — perbarui perhentian, tanggal, dan detail.", + walletTitle: "Dompet - SkateSpots", + walletDesc: "Hubungkan dompet Lightning Anda untuk mengirim zap ke skater dan pembuat spot.", + becomePhotographerTitle: "Jadi Fotografer - SkateSpots", + becomePhotographerDesc: "Buat profil fotografi skate Anda — kamera, lensa, pencahayaan, dan layanan.", + newsletterTitle: "Newsletter - SkateSpots", + newsletterDesc: "Kabar mingguan dari komunitas SkateSpots. Pembaruan aplikasi, spot baru, event, dan orang-orang yang menjaga skateboarding tetap hidup.", + homeTitle: "SkateSpots - Temukan Lokasi Skateboard di Seluruh Dunia", + zapLeaderboardTitle: "Papan Peringkat Zap - SkateSpots", + zapLeaderboardDesc: "Spot skate yang paling banyak di-zap dan anggota komunitas yang mendukungnya.", + adminReviewTitle: "Antrean tinjauan — SkateSpots", + gearSwapTitle: "Tukar Gear - SkateSpots", + gearSwapDesc: "Beli & jual gear skate bekas dengan skater lain. Deck, truck, roda, sepatu, dan lainnya.", + donateTitle: "Donasi — SkateSpots", + donateDesc: "Dukung SkateSpots — Lightning, on-chain privat (silent payments), atau danai pembangunan di Angor.", + verifyCardTitle: "Verifikasi — SkateSpots", + verifyCardDesc: "Verifikasi kartu atau pass akses SkateSpots.", + mapTitle: "Peta Spot Skate - SkateSpots", + mapDesc: "Jelajahi spot skateboard di seluruh dunia di peta interaktif kami.", + diyTitle: "DIY — Buat Sendiri | SkateSpots", + diyDesc: "Panduan, alat terbuka, dan rencana untuk membuat skateboard, ramp, dan spot beton Anda sendiri — serta orang dan tempat untuk melakukannya bersama.", + appShopTitle: "App Shop — SkateSpots", + becomeSkaterTitle: "Bergabung dengan Direktori Skater - SkateSpots", + becomeSkaterDesc: "Buat profil skater Anda agar komunitas dapat menemukan Anda.", + marketplaceTitle: "Marketplace - SkateSpots", + marketplaceDesc: "Beli dan jual gear skateboard di Plebeian Market yang terdesentralisasi.", + becomeEditorTitle: "Jadi Editor Video - SkateSpots", + becomeEditorDesc: "Buat profil editor video skateboard Anda di SkateSpots.", + amberCallbackTitle: "Masuk dengan Amber - SkateSpots", + amberCallbackDesc: "Menyelesaikan login Amber (NIP-55) Anda.", + supportersTitle: "Pendukung - SkateSpots", + supportersDesc: "Komunitas yang menjaga SkateSpots tetap hidup — pendukung, kolaborator, mitra, dan teman.", + becomeCoachTitle: "Jadi Coach - SkateSpots", + becomeCoachDesc: "Buat profil coach skateboard Anda.", + riderCardTitle: "Kartu Skater — SkateSpots", + riderCardDesc: "Buat Lisensi Skater atau Kartu Akses Park SkateSpots yang dapat dicetak.", + editEventDesc: "Edit event skateboard Anda.", + createShopTitle: "Tambah Skate Shop - SkateSpots", + createShopDesc: "Tambahkan skate shop Anda ke komunitas.", + deckCostTitle: "Kalkulator Biaya Deck — SkateSpots DIY", + deckCostDesc: "Hitung biaya pembuatan deck — tenaga kerja, peralatan, material, waktu proses, kemasan, dan margin — serta harga jual yang wajar.", + pyramidTitle: "Peringkat Piramida - SkateSpots", + pyramidDesc: "Kontributor teratas dan pemimpin komunitas.", + foodTitle: "Kuliner Dekat Spot - SkateSpots", + foodDesc: "Temukan restoran, kafe, dan pilihan makanan di dekat spot skateboard.", + createListingTitle: "Cantumkan Gear - SkateSpots", + createListingDesc: "Cantumkan gear skateboard untuk dijual atau temukan gear yang ingin Anda beli.", + becomeFilmerTitle: "Jadi Filmer - SkateSpots", + becomeFilmerDesc: "Buat profil filming skateboard Anda.", + skatersTitle: "Skater - SkateSpots", + skatersDesc: "Temukan skater di komunitas SkateSpots. Jelajahi berdasarkan gaya, stance, level, dan lokasi.", + communityStatsTitle: "Statistik Komunitas — SkateSpots", + communityStatsDesc: "Metrik komunitas langsung untuk SkateSpots — spot, event, coach, filmer, editor, tur, dan pertumbuhan dari waktu ke waktu. Diambil langsung dari Nostr.", + labTitle: "The Lab - SkateSpots", + labDesc: "Temukan coach skateboard, filmer, fotografer, dan editor video.", + stashTitle: "Stash Saya - SkateSpots", + stashDesc: "Kelola inventaris gear pribadi Anda. Lacak apa yang Anda miliki, apa yang ingin Anda jual atau tukar.", + bountyLeaderboardTitle: "Petakan & Hasilkan - SkateSpots", + bountyLeaderboardDesc: "Petakan spot skate dan shop, dapatkan zap dari komunitas. Lihat kontributor teratas.", + spotCollectionsTitle: "Koleksi Spot Saya - SkateSpots", + spotCollectionsDesc: "Atur spot skate favorit Anda ke dalam koleksi yang dipersonalisasi", + mintsTitle: "Mint Cashu — SkateSpots", + mintsDesc: "Jelajahi mint Cashu, periksa kesehatannya, dan tambahkan satu ke dompet Anda.", + }, + miscUi: { + openingCamera: "Membuka kamera…", + usePhoneCamera: "Gunakan kamera ponsel Anda, lalu kembali ke sini", + startingCamera: "Memulai kamera...", + cameraAccessRequired: "Akses Kamera Diperlukan", + cameraAccessHint: "Izinkan akses kamera di pengaturan browser Anda, atau gunakan pemilih file di bawah.", + cameraErrorTitle: "Kesalahan kamera", + cameraErrorDesc: "Tidak dapat membuka kamera. Silakan periksa izin aplikasi di Pengaturan.", + cameraDeniedTitle: "Akses kamera ditolak", + cameraDeniedDesc: "Silakan izinkan akses kamera di pengaturan browser Anda.", + uploadFromGallery: "Unggah dari Galeri", + uploading: "Mengunggah...", + usePhoto: "Gunakan Foto", + earningPotential: "Potensi Penghasilan", + qualityExcellent: "Luar biasa!", + qualityGood: "Bagus", + qualityBasic: "Dasar", + qualityGettingStarted: "Baru memulai", + qualityLocationAdded: "Lokasi ditambahkan", + qualityOnePhoto: "Setidaknya 1 foto", + qualityThreePhotos: "3+ foto", + qualityMoreAngles: "Lebih banyak sudut = lebih baik", + qualityDescription: "Deskripsi", + qualityDetailedDesc: "Deskripsi terperinci (100+ karakter)", + qualityContact: "Info kontak", + qualityPhoneOrWebsite: "Telepon atau situs web", + qualityHours: "Jam buka", + qualitySpotType: "Jenis spot dipilih", + failedToLoadComments: "Gagal memuat komentar", + commentsTitle: "Komentar", + noCommentsYet: "Belum ada komentar", + beFirstComment: "Jadilah yang pertama membagikan pendapat Anda!", + removeMember: "Hapus anggota", + whoIsThisFor: "Untuk siapa profil ini?", + individual: "Individu", + individualDesc: "Satu orang", + collective: "Kolektif", + collectiveDesc: "Crew, studio, atau perusahaan", + membersLabel: "Anggota", + dismissReport: "Abaikan laporan", + reportedBy: "dilaporkan oleh", + completingLoginAmber: "Menyelesaikan login dengan Amber...", + entityMembersHint: "Tambahkan akun Nostr crew Anda. Setiap anggota mengonfirmasi spot mereka sendiri dengan kunci mereka — sampai saat itu mereka tampil sebagai “tertunda”.", + entityVerifiedHint: "Keanggotaan diverifikasi per anggota — tidak ada yang bisa ditambahkan ke crew Anda tanpa mengonfirmasi dari akun mereka sendiri.", + entityInvalidPubkey: "Masukkan npub, nprofile, atau pubkey hex 64 karakter yang valid.", + entityAlreadyAdded: "Anggota itu sudah ditambahkan.", + offline: "Offline", + connected: "Terhubung", + offlineMode: "Mode Offline", + allFeaturesAvailable: "Semua fitur tersedia", + browsingCachedSpots: "Menjelajahi spot yang di-cache", + queuedActions: "{{count}} tindakan dalam antrean", + syncing: "Menyinkronkan", + publishingWhenStable: "Menerbitkan saat koneksi stabil...", + willPublishOnline: "Akan diterbitkan saat kembali online", + availableOffline: "Tersedia offline:", + offlineBrowseSpots: "Jelajahi spot yang pernah dilihat", + offlineViewDetails: "Lihat detail spot yang di-cache", + offlineKeepActing: "Terus bertindak — postingan, RSVP, listing, dan pesan diantrekan dan dikirim saat Anda terhubung kembali", + }, + sasquatchGuide: { + homeTitle: "Selamat datang di SkateSpots! 🦧", + homeMessage: "Yo, aku The Sasquatch. Penjaga board, jalur, dan ride liar. Selamat datang di dunia skate tak terkekang di Nostr—tanpa setelan, tanpa iklan, hanya skater yang mengukir jalannya sendiri. Di sini, kamu memiliki trikmu, datamu, dan bahkan bisa mendapatkan Bitcoin karena meninggalkan jejak. Terhubung dengan skater di lingkunganmu atau di seluruh dunia. Tidak ada aturan selain shredding, tidak ada jejak selain jejakmu sendiri.", + homeQ1: "Rencanakan aku 3 hari di Barcelona", + homeQ2: "Temukan spot pemula", + homeQ3: "Ada event mendatang?", + homeQ4: "Statistik komunitas", + homeQ5: "Temukan coach di dekatku", + homeQ6: "Ada gear yang dijual?", + homeQ7: "Apa itu Nostr?", + homeQ8: "Apakah ini gratis?", + homeLearnMore: "Pelajari Lebih Lanjut", + onboardingTitle: "Memulai 🚀", + onboardingMessage: "Biarkan aku membantumu memahami dasar-dasarnya! Nostr adalah identitasmu, Bitcoin Lightning memungkinkanmu mendapatkan sats untuk kontribusi, dan zap adalah tip instan. Tanyakan apa saja tentang memulai!", + onboardingQ1: "Bagaimana cara login?", + onboardingQ2: "Apa itu Nostr?", + onboardingQ3: "Bagaimana Nostr bekerja?", + onboardingQ4: "Apa itu Cashu?", + onboardingQ5: "Bagaimana cara menggunakan dompet Cashu?", + onboardingQ6: "Apa itu mint?", + onboardingQ7: "Apa itu zap?", + onboardingQ8: "Apa itu NWC?", + onboardingStart: "Mulai menjelajah", + onboardingLogin: "Masuk untuk memulai", + labTitle: "Selamat datang di The Lab! 🎓", + labMessage: "Di sinilah keajaiban terjadi! Temukan coach yang bisa mengajarimu apa saja dari kickflip hingga darkslide, atau terhubung dengan filmer untuk mengabadikan sesi terbaikmu. Filter berdasarkan keterampilan, periksa pengalaman mereka, dan pesan sesi. Ingat - semua orang pernah memulai dari suatu tempat!", + labQ1: "Temukan coach", + labQ2: "Temukan filmer", + labQ3: "Temukan fotografer", + labQ4: "Temukan editor video", + labQ5: "Temukan pembangun ramp", + labQ6: "Apa itu The Lab?", + labQ7: "Apa itu builder?", + labQ8: "Bagaimana cara menawarkan coaching?", + labLogin: "Masuk untuk Menawarkan Layanan", + crewsTitle: "Crew 🤘", + crewsMessage: "Crew adalah keluarga skate yang berlabuh di peta — orang-orang yang kamu ajak skate BERSAMA, bukan yang kamu sewa. Setiap crew memiliki wilayah asal di peta, home spot, anggota, dan manifesto. Anggota mengonfirmasi dengan kunci mereka sendiri, jadi daftarnya sah. Mulai crew sendiri atau temukan orangmu!", + crewsQ1: "Apa itu crew?", + crewsQ2: "Bagaimana cara memulai crew?", + crewsQ3: "Apa bedanya crew dengan The Lab?", + crewsQ4: "Bagaimana anggota mengonfirmasi?", + crewsQ5: "Apa itu Nostr?", + crewsQ6: "Bagaimana zap bekerja?", + crewsLogin: "Masuk untuk Membuat Crew", + }, + supportUi: { + keepMapFree: "Jaga peta tetap gratis", + keepMapFreeDesc: "Tanpa iklan, tanpa pelacakan, tanpa VC. sats Anda membayar hosting, node AI, dan relay.", + thankYou: "Terima kasih! ⚡", + satsKeepMapFree: "sats Anda menjaga peta tetap gratis.", + keptFreeNext: "Anda baru saja menjaga SkateSpots tetap gratis untuk skater berikutnya.", + scanToPay: "Pindai untuk bayar", + zapSkateSpots: "Zap SkateSpots", + payQuietly: "Bayar diam-diam", + pickAmount: "Pilih jumlah", + enterAmount: "Masukkan berapa banyak sats yang ingin Anda kirim.", + couldNotStartPayment: "Tidak dapat memulai pembayaran.", + customAmountAria: "Jumlah kustom dalam sats", + commentPlaceholder: "Katakan sesuatu (opsional — hanya zap publik)", + publicZapTitle: "Zap publik dengan komentar Anda", + loginToZapTitle: "Masuk untuk mengirim zap publik", + anonymousTitle: "Anonim — tanpa login, tanpa catatan", + copyLightningTitle: "Salin alamat lightning", + copiedSuffix: "{{label}} disalin", + invoiceLabel: "Invoice", + addressLabel: "Alamat", + notAPurchase: "Dukungan, bukan pembelian — tidak membeli apa pun dan tidak ada pengembalian dana. Merch dan Sasquatch Pro terpisah. Lokasi dan identitas Anda tidak pernah terlibat dalam pembayaran senyap.", + }, + statusUi: { + quickStatus: "Status Cepat", + skating: "Sedang Skate", + skatingDesc: "Sedang skating", + filming: "Sedang Filming", + filmingDesc: "Merekam trik", + lookingForSesh: "Mencari Sesi", + lookingForSeshDesc: "Ingin skate dengan orang lain", + coaching: "Coaching", + coachingDesc: "Mengajar/coaching", + chilling: "Santai", + chillingDesc: "Nongkrong di spot", + onMyWay: "Dalam Perjalanan", + onMyWayDesc: "Menuju ke spot", + takingABreak: "Sedang Istirahat", + takingABreakDesc: "Beristirahat/hidrasi", + doneForToday: "Selesai Hari Ini", + doneForTodayDesc: "Selesai skating", + }, +}; export default idBatch7; diff --git a/src/i18n/id/batch8.ts b/src/i18n/id/batch8.ts index 9a61a01..a55601f 100644 --- a/src/i18n/id/batch8.ts +++ b/src/i18n/id/batch8.ts @@ -1,4 +1,622 @@ -/** id — batch 8. Filled by the translation pass; empty until then. */ -const idBatch8 = {}; +/** id — batch 8. Filled by the translation pass. */ +const idBatch8 = { + deckCostUi: { + presetPrompt: "Beri nama preset ini", + presetDefaultName: "Preset {{n}}", + summaryCopied: "Ringkasan disalin", + couldNotCopy: "Gagal menyalin", + resetConfirm: "Reset semuanya ke nilai contoh?", + logoTooLarge: "Logo terlalu besar (maks 500 KB)", + loginToFill: "Masuk untuk mengisi dari profil Nostr Anda", + filledFromProfile: "Diisi dari profil Nostr Anda", + warnRetailBelowOne: "Markup ritel di bawah 1× — Anda akan menjual dengan rugi.", + warnWholesaleAboveRetail: "Markup grosir harus lebih rendah daripada markup ritel.", + warnZeroBoards: "{{count}} baris memakai 0 papan — biaya baris itu diabaikan.", + warnFixedNoBoards: "Biaya bulanan tetap diisi tetapi papan/bulan adalah 0, jadi biaya operasional diabaikan.", + warnNoMaterials: "Tidak ada biaya material — tambahkan setidaknya satu material.", + warnEquipmentOverhead: "Peralatan + overhead lebih dari 60% dari biaya — model ini mengasumsikan volume tinggi; periksa jumlah papan Anda.", + warnOneBoard: "Sebagian peralatan dibebankan pada satu papan — naikkan jumlah papannya untuk mengamortisasi.", + templateStarterName: "Hobi pemula", + templateStarterBlurb: "Beberapa baris, tanpa biaya tetap", + templateShopName: "Toko kecil", + templateShopBlurb: "Lembar lengkap dengan sewa & overhead", + currency: "Mata uang", + noCurrencyMatches: "Tidak ada mata uang yang cocok.", + ratesUnavailable: "Kurs langsung tidak tersedia — beralih hanya mengganti label.", + liveRates: "kurs BTC langsung · sats disertakan", + chipCost: "biaya", + chipSell: "jual", + chipTotal: "total", + startFrom: "Mulai dari", + advancedToggleHint: "Tampilkan tarif per operasi dan sisa scrap, penyiapan batch, pajak, dan kurva biaya-vs-kuantitas", + advanced: "Lanjutan", + simple: "Sederhana", + sectionLabor: "Tenaga Kerja", + sectionEquipment: "Peralatan", + sectionOperations: "Biaya operasional", + sectionMaterials: "Material", + sectionProcesses: "Biaya proses", + sectionPackaging: "Pengemasan", + sectionMargins: "Margin", + subtotalLoaded: "{{value}}/jam berbeban", + subtotalPerBoard: "{{value}}/papan", + hourlyRate: "Tarif per jam ({{unit}})", + labourBurden: "Beban tenaga kerja (×)", + loadedRate: "Tarif berbeban", + loadedRateHintBefore: "Tarif berbeban = upah × beban (pajak pemberi kerja dan asuransi tenaga kerja). Sewa dan tagihan masuk ke ", + loadedRateHintAfter: " — jangan menghitungnya di keduanya.", + colEquipment: "Peralatan", + colCostUnit: "Biaya ({{unit}})", + colCost: "Biaya", + colSetupH: "Penyiapan (j)", + colLifetimeBoards: "Umur pakai papan", + colPerBoard: "Per papan", + colMaterial: "Material", + colOrderUnit: "Pesan ({{unit}})", + colShipUnit: "Kirim ({{unit}})", + colBoardsOrder: "Papan / pesanan", + colOrderM: "Pesan (m)", + colUnloadM: "Bongkar (m)", + colOrder: "Pesan", + colShipping: "Pengiriman", + colOrderMin: "Pesan (mnt)", + colUnloadMin: "Bongkar (mnt)", + colProcess: "Proses", + colTimeM: "Waktu (m)", + colBoardsRun: "Papan / jalankan", + colRateHr: "Tarif/jam (0 = toko)", + colRateHrShort: "Tarif/jam", + colScrapPct: "Scrap %", + colTimeMin: "Waktu (mnt)", + colPackaging: "Pengemasan", + colTimeBoardM: "Waktu/papan (m)", + colTimeBoardMin: "Waktu/papan (mnt)", + colMaterialsBoardUnit: "Material/papan ({{unit}})", + colMaterialsBoard: "Material/papan", + equipmentPerBoard: "Peralatan per papan:", + materialsPerBoard: "Material per papan:", + processesPerBoard: "Proses per papan:", + packagingPerBoard: "Pengemasan per papan:", + perBoard: "Per papan:", + addEquipment: "Tambah peralatan", + addMaterial: "Tambah material", + addProcess: "Tambah proses", + addPackagingStep: "Tambah langkah pengemasan", + duplicate: "Duplikat", + remove: "Hapus", + boardsPerMonth: "Papan / bulan", + rentPerMonth: "Sewa / bulan", + utilitiesPerMonth: "Utilitas / bulan", + subscriptionsPerMonth: "Langganan / bulan", + markup: "Markup (×)", + wholesaleMarkup: "Markup grosir (×)", + scrapWaste: "Scrap / limbah (%)", + quantityDecks: "Kuantitas (Deck)", + targetMonthlyProfit: "Target laba bulanan ({{unit}})", + costNoPackaging: "Biaya / papan (tanpa pengemasan)", + costWithPackaging: "Biaya / papan (dengan pengemasan)", + batchSetupHours: "Penyiapan batch (j / jalankan)", + batchSetupCost: "Biaya penyiapan batch ({{unit}} / jalankan)", + taxVat: "Pajak / PPN (%)", + quoteTax: "Pajak penawaran", + includedInPrice: "Termasuk dalam harga", + addedOnTop: "Ditambahkan di atas", + setupPerBoard: "Penyiapan / papan", + marginNoteBefore: "Markup {{markup}}× ≈ ", + grossMargin: "{{pct}}% margin kotor", + marginNoteAfter: " · limbah {{waste}}% tersebar ke papan yang baik.", + sellingPriceNoPackaging: "Harga jual · tanpa pengemasan", + sellingPriceWithPackaging: "Harga jual · dengan pengemasan", + profitPerDeck: "Laba / Deck", + wholesalePerDeck: "Grosir / Deck", + orderTotalQty: "Total pesanan ({{qty}})", + orderTotal: "Total pesanan", + breakeven: "Titik impas", + breakevenPerMonth: "{{count}}/bln", + targetDecksHint: "Untuk mencapai {{amount}}/bulan di atas biaya tetap, jual {{decks}} Deck/bulan.", + priceIncludesTax: "Harga termasuk pajak {{pct}}%: {{amount}} dari total.", + plusTax: "Ditambah pajak {{pct}}%: {{amount}} → total {{total}}.", + costVsQuantity: "Biaya vs kuantitas (penyiapan diamortisasi)", + deckOne: "Deck", + deckOther: "Deck", + perDeckSuffix: "/ Deck", + orderSuffix: "pesanan {{amount}}", + shippingNotIncluded: "Tidak termasuk pengiriman ke pembeli.", + clientQuoteDetails: "Detail penawaran klien (untuk PDF)", + fillFromProfileTitle: "Isi nama, situs web, NIP-05, Lightning, dan npub dari profil Nostr Anda", + fillFromProfile: "Isi dari profil", + businessName: "Nama bisnis / toko", + email: "Email", + phone: "Telepon", + website: "Situs web", + address: "Alamat", + quoteNumber: "Penawaran #", + nextNumber: "Nomor berikutnya", + validDays: "Berlaku (hari)", + nip05: "NIP-05", + lightningAddress: "Alamat Lightning", + nostrNpub: "Nostr (npub)", + depositPct: "Uang muka di awal (%)", + deliveryTerms: "Syarat pengiriman (Incoterm, opsional)", + paymentMethods: "Metode pembayaran", + paymentTerms: "Syarat pembayaran", + paymentDetails: "Detail pembayaran", + notesTerms: "Catatan / syarat", + changeLogo: "Ganti logo", + addLogo: "Tambah logo", + incotermNone: "Tidak ada", + incotermExw: "EXW — ambil dari penjual", + incotermFca: "FCA — diserahkan ke kurir pembeli", + incotermDap: "DAP — dikirim ke alamat pembeli", + incotermDdp: "DDP — dikirim, bea dibayar", + payMethodCash: "Tunai", + payMethodLightning: "Lightning", + payMethodCashu: "Cashu", + payMethodBank: "Transfer bank", + payMethodCard: "Kartu", + payMethodOther: "Lainnya", + listDeckAtPrice: "Pasang Deck dengan harga ini", + getItMade: "Buatkan — cari pembuat", + savePreset: "Simpan preset", + load: "Muat", + export: "Ekspor", + import: "Impor", + reset: "Reset", + deletePreset: "Hapus preset", + exportPdfFull: "PDF — lembar lengkap", + exportPdfQuote: "PDF — penawaran klien", + exportPng: "Gambar PNG", + exportXlsx: "Buku kerja XLSX", + exportCsv: "CSV (spreadsheet)", + exportMarkdown: "Markdown", + exportJson: "JSON (cadangan)", + exportCopySummary: "Salin ringkasan", + }, + becomeRolesUi: { + artist: { + seoTitle: "Jadi Desainer / Seniman - SkateSpots", + seoDescription: "Cantumkan desain skate & seni Anda — grafis papan, logo, poster, merchandise, dan lainnya.", + heading: "Desainer / Seniman", + tagline: "Grafis papan, logo, poster, merchandise — pajang seni Anda di scene", + noun: "seniman", + rateLabel: "Tarif", + portfolioLabel: "Portofolio / tautan toko", + sectionWhatYouMake: "Yang Anda Buat", + sectionMedium: "Media", + sectionSoftwareTools: "Perangkat Lunak & Alat", + deliverablesPlaceholder: "mis. file siap cetak, file sumber, grafis Deck", + turnaroundPlaceholder: "mis. 3–5 hari", + }, + graffiti: { + seoTitle: "Tawarkan Graffiti / Mural - SkateSpots", + seoDescription: "Cantumkan karya graffiti & mural Anda — piece, mural, seni skatepark, dan lainnya.", + heading: "Seniman Graffiti / Mural", + tagline: "Piece, mural, seni skatepark — warnai scene", + noun: "seniman graffiti", + rateLabel: "Tarif", + portfolioLabel: "Tautan portofolio (IG, situs)", + sectionStyle: "Gaya", + sectionMedium: "Media", + sectionWorkContext: "Konteks Kerja", + crewLabel: "Graffiti Crew", + crewPlaceholder: "Crew tulisan Anda (opsional)", + crewHelper: "Terpisah dari Crew skate Anda — para writer yang Anda lukis bersama.", + surfacesPlaceholder: "mis. beton, bata, dinding berizin", + maxSizePlaceholder: "mis. hingga 10 m", + }, + musician: { + seoTitle: "Tambahkan Profil Musik - SkateSpots", + seoDescription: "Skate sambil bermusik? Cantumkan band atau proyek solo Anda — genre, instrumen, dan tautan.", + heading: "Musisi / Band", + tagline: "Skate sambil bermusik? Dapatkan panggilan untuk demo, jam & after-party", + noun: "musisi", + rateLabel: "Tarif Booking", + portfolioLabel: "Tautan situs web / EPK", + sectionGenre: "Genre", + sectionInstruments: "Instrumen & Peran", + actLabel: "Jenis Act", + actPlaceholder: "solo / band / dj / produser", + spotifyLabel: "Spotify", + spotifyPlaceholder: "https://open.spotify.com/…", + bandcampLabel: "Bandcamp", + bandcampPlaceholder: "https://…bandcamp.com", + soundcloudLabel: "SoundCloud", + soundcloudPlaceholder: "https://soundcloud.com/…", + youtubeLabel: "YouTube", + youtubePlaceholder: "https://youtube.com/…", + setLengthPlaceholder: "mis. 30–45 menit", + techRiderPlaceholder: "mis. PA, mic, backline", + }, + judge: { + seoTitle: "Juri Event Skate - SkateSpots", + seoDescription: "Cantumkan diri Anda sebagai juri event skate — Game of S.K.A.T.E., best trick jam, kontes, am series, dan World Tour stop. Dapatkan panggilan untuk menjalankan event yang adil dan kredibel.", + heading: "Juri Event Skate", + tagline: "Dari Game of S.K.A.T.E. di flat-ground hingga World Destruction Tour — jalankan dengan adil dan kredibel", + noun: "juri", + rateLabel: "Tarif Harian / Biaya", + portfolioLabel: "Arsip hasil / tautan profil", + sectionEventFormats: "Format Event", + sectionSpecialty: "Spesialisasi", + sectionLevelCircuit: "Level / Sirkuit", + eventsJudgedLabel: "Event yang Dijuri", + eventsJudgedPlaceholder: "mis. 40+ kontes, 3 World Tour stop", + eventsJudgedHelper: "Event, kompetisi, atau tur penting yang pernah Anda pimpin.", + travelPlaceholder: "mis. regional / nasional / internasional", + certificationsPlaceholder: "mis. kursus juri nasional", + }, + organizer: { + seoTitle: "Selenggarakan Event Skate - SkateSpots", + seoDescription: "Cantumkan diri Anda sebagai penyelenggara event skate — street jam, best trick, kontes, meetup, demo, dan tour stop. Ditemukan dan dipesan untuk menjalankan sesi.", + heading: "Penyelenggara Event", + tagline: "Jam, kontes, meetup & demo — jalankan sesi dan satukan scene", + noun: "penyelenggara", + rateLabel: "Biaya / Anggaran Event", + portfolioLabel: "Event lalu / tautan hasil", + sectionEventTypes: "Jenis Event", + sectionWhatYouHandle: "Yang Anda Tangani", + sectionScale: "Skala", + eventsHostedLabel: "Event yang Diselenggarakan", + eventsHostedPlaceholder: "mis. 25 jam, 3 kontes kota", + eventsHostedHelper: "Event, kompetisi, atau meetup penting yang pernah Anda jalankan.", + insurancePlaceholder: "mis. termasuk tanggung jawab publik", + permitsPlaceholder: "mis. izin dewan ditangani", + }, + tattoo: { + seoTitle: "Jadi Seniman Tato - SkateSpots", + seoDescription: "Cantumkan karya tato Anda untuk scene skate — gaya, flash, custom, dan lainnya.", + heading: "Seniman Tato", + tagline: "Tinta untuk scene — flash, custom, fine line & lainnya", + noun: "seniman tato", + rateLabel: "Tarif / Per Jam", + portfolioLabel: "Tautan portofolio (IG, situs)", + sectionStyles: "Gaya", + sectionMethod: "Metode", + studioLabel: "Studio / Toko", + studioPlaceholder: "Nama studio (opsional)", + booksOpenLabel: "Buku Terbuka", + booksOpenHelper: "Apakah Anda sedang menerima pemesanan?", + depositPlaceholder: "mis. 50 EUR tidak dapat dikembalikan", + minimumPlaceholder: "mis. 80 EUR", + }, + trainer: { + seoTitle: "Jadi Trainer / Fisio - SkateSpots", + seoDescription: "Bantu skater menjadi kuat dan tetap sehat — kekuatan, mobilitas, pencegahan cedera, dan pemulihan.", + heading: "Trainer / Fisio", + tagline: "Kekuatan, mobilitas, pencegahan cedera & pemulihan untuk skater", + noun: "trainer", + rateLabel: "Tarif / Sesi", + portfolioLabel: "Tautan profil / pemesanan", + sectionFocus: "Fokus", + sectionInjuries: "Cedera yang Anda Tangani", + sectionCredentialsSetting: "Kredensial & Pengaturan", + credentialsPlaceholder: "mis. BSc Fisioterapi, CSCS…", + credentialsHelper: "Cantumkan kualifikasi nyata — skater mempercayai kredensial yang dapat diverifikasi.", + remoteLabel: "Jarak Jauh / Online", + remoteHelper: "Apakah Anda menawarkan coaching atau konsultasi online?", + modalitiesPlaceholder: "mis. hands-on, S&C, dry needling", + }, + barber: { + seoTitle: "Jadi Barber / Penata Rambut - SkateSpots", + seoDescription: "Cantumkan barbershop atau kursi Anda untuk scene skate — potong, fade, rapikan jenggot, warna, dan lainnya. Dipesan oleh skater.", + heading: "Barber / Penata Rambut", + tagline: "Potong, fade & rapikan jenggot untuk scene — kursi toko atau keliling", + noun: "barber", + rateLabel: "Harga / Potong", + portfolioLabel: "Galeri potongan / tautan IG", + sectionWhatYouOffer: "Yang Anda Tawarkan", + sectionSignatureStyles: "Gaya Andalan", + sectionSetting: "Pengaturan", + studioLabel: "Toko / Studio", + studioPlaceholder: "Nama toko atau studio (opsional)", + booksOpenLabel: "Buku Terbuka", + booksOpenHelper: "Apakah Anda sedang menerima pemesanan?", + durationPlaceholder: "mis. 30–45 menit", + }, + }, + weatherUi: { + condition: { + clearSky: "Langit cerah", + mainlyClear: "Sebagian besar cerah", + partlyCloudy: "Berawan sebagian", + overcast: "Mendung", + foggy: "Berkabut", + depositingRimeFog: "Kabut rime yang mengendap", + lightDrizzle: "Gerimis ringan", + moderateDrizzle: "Gerimis sedang", + denseDrizzle: "Gerimis lebat", + lightFreezingDrizzle: "Gerimis beku ringan", + denseFreezingDrizzle: "Gerimis beku lebat", + slightRain: "Hujan ringan", + moderateRain: "Hujan sedang", + heavyRain: "Hujan lebat", + lightFreezingRain: "Hujan beku ringan", + heavyFreezingRain: "Hujan beku lebat", + slightSnow: "Salju ringan", + moderateSnow: "Salju sedang", + heavySnow: "Salju lebat", + snowGrains: "Butiran salju", + slightRainShowers: "Hujan lokal ringan", + moderateRainShowers: "Hujan lokal sedang", + violentRainShowers: "Hujan lokal deras", + slightSnowShowers: "Hujan salju ringan", + heavySnowShowers: "Hujan salju lebat", + thunderstorm: "Badai petir", + thunderstormSlightHail: "Badai petir dengan hujan es ringan", + thunderstormHeavyHail: "Badai petir dengan hujan es lebat", + unknown: "Tidak diketahui", + }, + aqi: { + good: "Baik", + moderate: "Sedang", + unhealthySensitive: "Tidak sehat untuk Kelompok Sensitif", + unhealthy: "Tidak sehat", + veryUnhealthy: "Sangat Tidak Sehat", + hazardous: "Berbahaya", + }, + skateability: { + perfect: "Sempurna", + good: "Baik", + okay: "Cukup", + poor: "Buruk", + bad: "Sangat Buruk", + unrideable: "Tidak Bisa Ditunggangi", + }, + reason: { + currentlyRaining: "Sedang hujan", + raining: "Hujan", + snowing: "Bersalju", + thunderstorm: "Badai petir", + freezingTemperature: "Suhu beku", + veryCold: "Sangat dingin", + extremelyHot: "Sangat panas", + veryHot: "Terlalu panas", + veryStrongWind: "Angin sangat kencang", + strongWind: "Angin kencang", + moderateWind: "Angin sedang", + veryUnhealthyAir: "Udara sangat tidak sehat", + unhealthyAir: "Udara tidak sehat", + moderateAirQuality: "Kualitas udara sedang", + veryHumid: "Sangat lembap", + humid: "Lembap", + extremeUv: "UV ekstrem - pakai tabir surya", + highUv: "UV tinggi - disarankan perlindungan matahari", + perfectConditions: "Kondisi skating sempurna", + }, + }, + skaterLabelsUi: { + stance: { + regular: "Regular", + goofy: "Goofy", + }, + style: { + street: "Street", + park: "Park", + vert: "Vert", + transition: "Transition", + bowl: "Bowl", + cruising: "Cruising", + downhill: "Downhill", + freestyle: "Freestyle", + ledges: "Ledges", + stairs: "Stairs", + diy: "DIY", + }, + level: { + grom: "Grom", + intermediate: "Menengah", + advanced: "Mahir", + ripper: "Ripper", + }, + sponsor: { + title: "Title Sponsor", + gold: "Gold", + silver: "Silver", + partner: "Partner", + }, + }, + notifyUi: { + activity: { + zappedWithAmount: "Anda mendapat zap {{sats}} sats", + zapped: "Anda mendapat zap", + liked: "Seseorang menyukai postingan Anda", + reposted: "Seseorang merepost Anda", + mentioned: "Seseorang menyebut Anda", + replied: "Seseorang membalas Anda", + rsvp: "Seseorang RSVP ke event Anda", + eventUpdated: "Event yang akan Anda hadiri diperbarui", + newActivity: "Aktivitas baru", + tapToOpen: "Ketuk untuk membuka SkateSpots", + }, + crew: { + inviteTitle: "Undangan Crew", + inviteBody: "Anda diundang ke {{crew}}", + addedTitle: "Anda telah ditambahkan ke Crew", + addedBody: "{{crew}} — konfirmasi untuk bergabung", + joinRequestTitle: "Permintaan bergabung", + joinRequestBody: "Seseorang ingin bergabung ke {{name}}", + }, + dm: { + title: "Pesan langsung baru", + body: "Ketuk untuk membaca", + }, + trade: { + confirm: "Konfirmasi trade", + confirmed: "Trade terkonfirmasi", + newOffer: "Penawaran baru di listing Anda", + counter: "Penawaran balik", + accepted: "Penawaran diterima 🎉", + declined: "Penawaran ditolak", + withdrawn: "Penawaran ditarik", + }, + newsletter: { + drop: "Drop SkateSpots baru", + }, + summary: { + moreUpdates: "{{count}} pembaruan lagi", + openToCatchUp: "Buka SkateSpots untuk menyusul", + }, + }, + legacyMiscUi: { + hostingGoing: "{{count}} hadir", + hostingInterested: "{{count}} tertarik", + hostingPostUpdate: "Posting pembaruan", + hostingEdit: "Edit", + hostingLoginToSee: "Masuk untuk melihat event yang Anda selenggarakan.", + hostingEmptyTitle: "Anda belum menyelenggarakan apa pun", + hostingEmptyBody: "Jalankan jam, kontes, atau sesi. Buat event dan skater dapat RSVP, mendapat pembaruan, dan ikut bergabung.", + hostingCreateEvent: "Buat event", + hostingUpcoming: "Akan Datang · {{count}}", + hostingPast: "Lalu · {{count}}", + sponsorPartners: "Mitra", + sponsorTitleSponsor: "Title Sponsor", + sponsorPlatformPartners: "Mitra Platform", + reportsUntitled: "(tanpa judul)", + reportsResolveFailed: "Tidak dapat menyelesaikan event yang dilaporkan (mungkin sudah dihapus, atau laporan menargetkan profil, bukan postingan).", + reportsLookAtIt: "Lihat", + reportsNoReports: "Belum ada laporan. Entah semuanya baik-baik saja, atau belum ada yang menemukan tombolnya.", + statusSetYourStatus: "Atur Status Anda", + statusSetDesc: "Beri tahu orang lain apa yang sedang Anda lakukan. Status Anda akan terlihat di profil Anda dan di Spot yang ditautkan.", + statusClear: "Bersihkan", + statusOrWriteOwn: "Atau tulis sendiri", + statusCustomPlaceholder: "Apa yang sedang Anda lakukan?", + statusLinkToSpot: "Tautkan ke Spot (opsional)", + statusSpotSelected: "Spot dipilih", + statusSearchSpots: "Cari Spot...", + statusNoSpotsFound: "Tidak ada Spot ditemukan.", + statusSelectSpot: "Pilih Spot", + statusAutoClearAfter: "Hapus otomatis setelah: {{time}}", + statusExpMin: "{{count}} mnt", + statusExpOneHour: "1 jam", + statusExpHours: "{{count}} jam", + statusExpOneDay: "1 hari", + statusExpDays: "{{count}} hari", + statusSlider15: "15 mnt", + statusSlider1h: "1 j", + statusSlider4h: "4 j", + statusSlider24h: "24 j", + statusSetting: "Mengatur Status...", + statusSet: "Atur Status", + statusSomethingWrong: "Terjadi kesalahan", + seoProfileTitle: "Profil - SkateSpots", + seoViewProfile: "Lihat profil.", + bannerAlt: "Banner", + openInCordn: "Buka di Cordn", + modHelp: "Hide mempublikasikan org.skatespots.moderation / hidden; Confirm mempublikasikan … / verified; Undo mempublikasikan … / cleared (kembali netral). Ketiganya adalah label publik yang dapat dibalik — tidak ada yang pernah dihapus dari relay.", + zapNoActiveMint: "Tidak ada mint Cashu aktif ditemukan.", + altProfile: "Profil", + altCardPreview: "Pratinjau kartu", + altCard: "Kartu", + altCaptured: "Tertangkap", + ariaPrevPhoto: "Foto sebelumnya", + ariaNextPhoto: "Foto berikutnya", + ariaCommentOptions: "Opsi komentar", + ariaMessageConversation: "Percakapan pesan", + exportTitle: "SkateSpots — Kalkulator biaya Deck", + exportQuoteTitle: "PENAWARAN", + exportPngTitle: "Biaya Deck", + exportMarkdownTitle: "Kalkulator biaya Deck", + exportSectionLabor: "Tenaga Kerja", + exportSectionEquipment: "Peralatan", + exportSectionOperations: "Biaya operasional", + exportSectionMaterials: "Material", + exportSectionProcesses: "Biaya proses", + exportSectionPackaging: "Pengemasan", + exportSectionResult: "Hasil", + exportLabelOperations: "Operasional", + exportLabelProcesses: "Proses", + exportKvHourlyRate: "Tarif per jam", + exportKvLabourBurden: "Beban tenaga kerja", + exportKvLoadedRate: "Tarif berbeban", + exportKvEquipmentPerBoard: "Peralatan per papan", + exportKvBoardsPerMonth: "Papan / bulan", + exportKvRentPerMonth: "Sewa / bulan", + exportKvUtilitiesPerMonth: "Utilitas / bulan", + exportKvSubscriptionsPerMonth: "Langganan / bulan", + exportKvPerBoard: "Per papan", + exportKvMaterialsPerBoard: "Material per papan", + exportKvProcessesPerBoard: "Proses per papan", + exportKvPackagingPerBoard: "Pengemasan per papan", + exportKvMarkup: "Markup", + exportMarkupValue: "{{markup}}× (≈ {{pct}}% margin kotor)", + exportKvWasteEffective: "Limbah (efektif)", + exportKvCostNoPack: "Biaya / papan (tanpa pengemasan)", + exportKvCostWithPack: "Biaya / papan (dengan pengemasan)", + exportKvBatchSetupPerBoard: "Penyiapan batch / papan", + exportKvTax: "Pajak ({{pct}}%)", + exportKvTaxIncluded: "Pajak ({{pct}}%, termasuk)", + exportKvSellingNoPack: "Harga jual (tanpa pengemasan)", + exportKvSellingWithPack: "Harga jual (dengan pengemasan)", + exportShippingNote: "Tidak termasuk pengiriman ke pembeli.", + exportGeneratedBy: "Dibuat oleh SkateSpots · skate-spots.org", + exportGeneratedWith: "Dibuat dengan SkateSpots · skate-spots.org", + exportDetailSetup: "+ {{hours}} j penyiapan", + exportDetailBoards: "{{boards}} papan", + exportDetailShip: "+ {{amount}} kirim", + exportDetailMinutes: "{{minutes}} mnt", + exportDetailPerBoards: "/ {{boards}} papan", + exportDetailScrap: "{{pct}}% scrap", + exportDetailMaterials: "{{materials}} material", + exportQuoteRef: "Ref {{ref}}", + exportQuoteLineItem: "Deck skateboard custom", + exportQuoteLineItemQty: "Deck skateboard custom × {{qty}}", + exportQuoteLineDesc: "Dibuat tangan, diselesaikan, dan dikemas. Kuantitas 1.", + exportQuoteLineDescQty: "Dibuat tangan, diselesaikan, dan dikemas. {{price}} masing-masing.", + exportQuoteSubtotal: "Subtotal", + exportQuoteSubtotalQty: "Subtotal ({{qty}} Deck)", + exportQuoteTax: "Pajak / PPN ({{pct}}%)", + exportQuoteTotal: "Total", + exportQuoteTotalQty: "Total ({{qty}} Deck)", + exportQuoteIncludesTax: "Termasuk pajak {{pct}}% ({{amount}})", + exportQuoteDeposit: "Uang muka sekarang ({{pct}}%)", + exportQuoteBalance: "Sisa saat selesai", + exportQuotePayment: "Pembayaran: {{value}}", + exportQuoteLightning: "Lightning: {{value}}", + exportQuoteDetails: "Detail: {{value}}", + exportQuoteTerms: "Syarat: {{value}}", + exportQuoteDelivery: "Pengiriman: {{value}}", + exportQuoteValidUntil: "Tidak termasuk pengiriman. Penawaran berlaku hingga {{date}}.", + exportPngSellingWith: "HARGA JUAL · DENGAN PENGEMASAN", + exportPngSellingNo: "HARGA JUAL · TANPA PENGEMASAN", + exportPngCostWith: "BIAYA / PAPAN (DENGAN PENGEMASAN)", + exportPngDeposit: "Uang muka {{pct}}%: {{amount}}", + exportXlsxSummary: "Ringkasan", + exportXlsxCurrency: "Mata uang", + exportXlsxDate: "Tanggal", + exportXlsxOperationsPerBoard: "Operasional per papan", + exportColCost: "Biaya", + exportColSetupH: "Penyiapan (j)", + exportColBoards: "Papan", + exportColPerBoard: "Per papan", + exportColMaterial: "Material", + exportColOrderCost: "Biaya pesan", + exportColShipping: "Pengiriman", + exportColOrderMin: "Pesan (mnt)", + exportColUnloadMin: "Bongkar (mnt)", + exportColProcess: "Proses", + exportColTimeMin: "Waktu (mnt)", + exportColTimeBoardMin: "Waktu/papan (mnt)", + exportColMaterialsBoard: "Material/papan", + exportCopyTitle: "Biaya Deck — {{currency}}", + exportCopyCostWith: "Biaya / papan (dengan pengemasan): {{amount}}", + exportCopySellingNo: "Harga jual (tanpa pengemasan): {{amount}}", + exportCopySellingWith: "Harga jual (dengan pengemasan): {{amount}}", + exportCopyBreakdown: "Peralatan {{equipment}} · Operasional {{operations}} · Material {{materials}} · Proses {{processes}} · Pengemasan {{packaging}}", + exportMdHourlyRate: "Tarif per jam: {{value}}", + exportMdLabourBurden: "Beban tenaga kerja: {{value}}", + exportMdLoadedRate: "Tarif berbeban: {{value}}", + exportMdBoardsPerMonth: "Papan/bulan: {{value}}", + exportMdRent: "Sewa: {{value}}", + exportMdUtilities: "Utilitas: {{value}}", + exportMdSubscriptions: "Langganan: {{value}}", + exportMdPerBoard: "Per papan: {{value}}", + exportMdMarkupWaste: "Markup: {{markup}}× (≈ {{pct}}% margin kotor) · Limbah: {{waste}}%", + exportMdCostNoPack: "Biaya/papan (tanpa pengemasan): {{value}}", + exportMdCostWithPack: "Biaya/papan (dengan pengemasan): {{value}}", + exportMdBatchSetup: "Penyiapan batch/papan: {{value}}", + exportMdSellingNo: "Harga jual (tanpa pengemasan): {{value}}", + exportMdSellingWith: "Harga jual (dengan pengemasan): {{value}}", + exportMdDisclaimer: "Tidak termasuk pengiriman ke pembeli. Dibuat oleh SkateSpots.", + }, +}; export default idBatch8; diff --git a/src/pages/CreateTourPage.tsx b/src/pages/CreateTourPage.tsx index 7697b7b..c8f01d3 100644 --- a/src/pages/CreateTourPage.tsx +++ b/src/pages/CreateTourPage.tsx @@ -38,6 +38,7 @@ const COMMON_LANGUAGES = [ { code: 'ja', label: 'Japanese', flag: '🇯🇵' }, { code: 'zh-CN', label: 'Chinese (Simplified)', flag: '🇨🇳' }, { code: 'zh-TW', label: 'Chinese (Traditional)', flag: '🇹🇼' }, + { code: 'id', label: 'Indonesian', flag: '🇮🇩' }, { code: 'cs', label: 'Czech', flag: '🇨🇿' }, { code: 'ro', label: 'Romanian', flag: '🇷🇴' }, { code: 'sv', label: 'Swedish', flag: '🇸🇪' },