const id: Record = { // Common 'common.save': 'Simpan', 'common.showMore': 'Tampilkan lebih banyak', 'common.showLess': 'Tampilkan lebih sedikit', 'common.cancel': 'Batal', 'common.clear': 'Hapus', 'common.delete': 'Hapus', 'common.edit': 'Sunting', 'common.add': 'Tambah', 'common.loading': 'Memuat...', 'common.import': 'Impor', 'common.error': 'Kesalahan', 'common.unknownError': 'Kesalahan tidak diketahui', 'common.tooManyAttempts': 'Terlalu banyak percobaan. Coba lagi nanti.', 'common.back': 'Kembali', 'common.all': 'Semua', 'common.close': 'Tutup', 'common.open': 'Buka', 'common.upload': 'Unggah', 'common.search': 'Cari', 'common.confirm': 'Konfirmasi', 'common.ok': 'OK', 'common.yes': 'Ya', 'common.no': 'Tidak', 'common.or': 'atau', 'common.none': 'Tidak ada', 'common.date': 'Tanggal', 'common.rename': 'Ganti nama', 'common.name': 'Nama', 'common.email': 'Email', 'common.password': 'Kata sandi', 'common.saving': 'Menyimpan...', 'common.justNow': 'baru saja', 'common.hoursAgo': '{count}j lalu', 'common.daysAgo': '{count}h lalu', 'common.saved': 'Tersimpan', 'trips.memberRemoved': '{username} dihapus', 'trips.memberRemoveError': 'Gagal menghapus', 'trips.memberAdded': '{username} ditambahkan', 'trips.memberAddError': 'Gagal menambahkan', 'trips.reminder': 'Pengingat', 'trips.reminderNone': 'Tidak ada', 'trips.reminderDay': 'hari', 'trips.reminderDays': 'hari', 'trips.reminderCustom': 'Kustom', 'trips.reminderDaysBefore': 'hari sebelum keberangkatan', 'trips.reminderDisabledHint': 'Pengingat perjalanan dinonaktifkan. Aktifkan di Admin > Pengaturan > Notifikasi.', 'common.update': 'Perbarui', 'common.change': 'Ubah', 'common.uploading': 'Mengunggah…', 'common.backToPlanning': 'Kembali ke Perencanaan', 'common.reset': 'Atur ulang', 'common.expand': 'Perluas', 'common.collapse': 'Ciutkan', // Navbar 'nav.trip': 'Perjalanan', 'nav.share': 'Bagikan', 'nav.settings': 'Pengaturan', 'nav.admin': 'Admin', 'nav.logout': 'Keluar', 'nav.lightMode': 'Mode Terang', 'nav.darkMode': 'Mode Gelap', 'nav.autoMode': 'Mode Otomatis', 'nav.administrator': 'Administrator', // Dashboard 'dashboard.title': 'Perjalananku', 'dashboard.subtitle.loading': 'Memuat perjalanan...', 'dashboard.subtitle.trips': '{count} perjalanan ({archived} diarsipkan)', 'dashboard.subtitle.empty': 'Mulai perjalanan pertamamu', 'dashboard.subtitle.activeOne': '{count} perjalanan aktif', 'dashboard.subtitle.activeMany': '{count} perjalanan aktif', 'dashboard.subtitle.archivedSuffix': ' · {count} diarsipkan', 'dashboard.newTrip': 'Perjalanan Baru', 'dashboard.gridView': 'Tampilan grid', 'dashboard.listView': 'Tampilan daftar', 'dashboard.currency': 'Mata uang', 'dashboard.timezone': 'Zona waktu', 'dashboard.localTime': 'Lokal', 'dashboard.timezoneCustomTitle': 'Zona Waktu Kustom', 'dashboard.timezoneCustomLabelPlaceholder': 'Label (opsional)', 'dashboard.timezoneCustomTzPlaceholder': 'mis. America/New_York', 'dashboard.timezoneCustomAdd': 'Tambah', 'dashboard.timezoneCustomErrorEmpty': 'Masukkan pengenal zona waktu', 'dashboard.timezoneCustomErrorInvalid': 'Zona waktu tidak valid. Gunakan format seperti Europe/Berlin', 'dashboard.timezoneCustomErrorDuplicate': 'Sudah ditambahkan', 'dashboard.emptyTitle': 'Belum ada perjalanan', 'dashboard.emptyText': 'Buat perjalanan pertamamu dan mulai merencanakan!', 'dashboard.emptyButton': 'Buat Perjalanan Pertama', 'dashboard.nextTrip': 'Perjalanan Berikutnya', 'dashboard.shared': 'Dibagikan', 'dashboard.sharedBy': 'Dibagikan oleh {name}', 'dashboard.days': 'Hari', 'dashboard.places': 'Tempat', 'dashboard.members': 'Teman perjalanan', 'dashboard.archive': 'Arsipkan', 'dashboard.copyTrip': 'Salin', 'dashboard.copySuffix': 'salinan', 'dashboard.restore': 'Pulihkan', 'dashboard.archived': 'Diarsipkan', 'dashboard.status.ongoing': 'Sedang berlangsung', 'dashboard.status.today': 'Hari ini', 'dashboard.status.tomorrow': 'Besok', 'dashboard.status.past': 'Sudah lewat', 'dashboard.status.daysLeft': '{count} hari lagi', 'dashboard.toast.loadError': 'Gagal memuat perjalanan', 'dashboard.toast.created': 'Perjalanan berhasil dibuat!', 'dashboard.toast.createError': 'Gagal membuat perjalanan', 'dashboard.toast.updated': 'Perjalanan diperbarui!', 'dashboard.toast.updateError': 'Gagal memperbarui perjalanan', 'dashboard.toast.deleted': 'Perjalanan dihapus', 'dashboard.toast.deleteError': 'Gagal menghapus perjalanan', 'dashboard.toast.archived': 'Perjalanan diarsipkan', 'dashboard.toast.archiveError': 'Gagal mengarsipkan perjalanan', 'dashboard.toast.restored': 'Perjalanan dipulihkan', 'dashboard.toast.restoreError': 'Gagal memulihkan perjalanan', 'dashboard.toast.copied': 'Perjalanan disalin!', 'dashboard.toast.copyError': 'Gagal menyalin perjalanan', 'dashboard.confirm.delete': 'Hapus perjalanan "{title}"? Semua tempat dan rencana akan dihapus permanen.', 'dashboard.editTrip': 'Edit Perjalanan', 'dashboard.createTrip': 'Buat Perjalanan Baru', 'dashboard.tripTitle': 'Judul', 'dashboard.tripTitlePlaceholder': 'mis. Musim Panas di Jepang', 'dashboard.tripDescription': 'Deskripsi', 'dashboard.tripDescriptionPlaceholder': 'Perjalanan ini tentang apa?', 'dashboard.startDate': 'Tanggal Mulai', 'dashboard.endDate': 'Tanggal Selesai', 'dashboard.dayCount': 'Jumlah Hari', 'dashboard.dayCountHint': 'Berapa hari yang ingin direncanakan jika tanggal perjalanan belum diatur.', 'dashboard.noDateHint': 'Belum ada tanggal — 7 hari default akan dibuat. Bisa diubah kapan saja.', 'dashboard.coverImage': 'Gambar Sampul', 'dashboard.addCoverImage': 'Tambah gambar sampul (atau seret & lepas)', 'dashboard.addMembers': 'Teman perjalanan', 'dashboard.addMember': 'Tambah anggota', 'dashboard.coverSaved': 'Gambar sampul tersimpan', 'dashboard.coverUploadError': 'Gagal mengunggah', 'dashboard.coverRemoveError': 'Gagal menghapus', 'dashboard.titleRequired': 'Judul wajib diisi', 'dashboard.endDateError': 'Tanggal selesai harus setelah tanggal mulai', // Settings 'settings.title': 'Pengaturan', 'settings.subtitle': 'Atur pengaturan pribadimu', 'settings.tabs.display': 'Tampilan', 'settings.tabs.map': 'Peta', 'settings.tabs.notifications': 'Notifikasi', 'settings.tabs.integrations': 'Integrasi', 'settings.tabs.account': 'Akun', 'settings.tabs.offline': 'Offline', 'settings.tabs.about': 'Tentang', 'settings.map': 'Peta', 'settings.mapTemplate': 'Template Peta', 'settings.mapTemplatePlaceholder.select': 'Pilih template...', 'settings.mapDefaultHint': 'Kosongkan untuk OpenStreetMap (default)', 'settings.mapTemplatePlaceholder': 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', 'settings.mapHint': 'Template URL untuk tile peta', 'settings.latitude': 'Lintang', 'settings.longitude': 'Bujur', 'settings.saveMap': 'Simpan Peta', 'settings.apiKeys': 'API Keys', 'settings.mapsKey': 'Google Maps API Key', 'settings.mapsKeyHint': 'Untuk pencarian tempat. Memerlukan Places API (New). Dapatkan di console.cloud.google.com', 'settings.weatherKey': 'OpenWeatherMap API Key', 'settings.weatherKeyHint': 'Untuk data cuaca. Gratis di openweathermap.org/api', 'settings.keyPlaceholder': 'Masukkan key...', 'settings.configured': 'Sudah dikonfigurasi', 'settings.saveKeys': 'Simpan Keys', 'settings.display': 'Tampilan', 'settings.colorMode': 'Mode Warna', 'settings.light': 'Terang', 'settings.dark': 'Gelap', 'settings.auto': 'Otomatis', 'settings.language': 'Bahasa', 'settings.temperature': 'Satuan Suhu', 'settings.timeFormat': 'Format Waktu', 'settings.routeCalculation': 'Perhitungan Rute', 'settings.blurBookingCodes': 'Sembunyikan Kode Pemesanan', 'settings.notifications': 'Notifikasi', 'settings.notifyTripInvite': 'Undangan perjalanan', 'settings.notifyBookingChange': 'Perubahan pemesanan', 'settings.notifyTripReminder': 'Pengingat perjalanan', 'settings.notifyVacayInvite': 'Undangan Vacay fusion', 'settings.notifyPhotosShared': 'Foto dibagikan (Immich)', 'settings.notifyCollabMessage': 'Pesan chat (Collab)', 'settings.notifyPackingTagged': 'Daftar bawaan: penugasan', 'settings.notifyWebhook': 'Notifikasi webhook', 'settings.notifyVersionAvailable': 'Versi baru tersedia', 'settings.notificationPreferences.email': 'Email', 'settings.notificationPreferences.webhook': 'Webhook', 'settings.notificationPreferences.inapp': 'In-App', 'settings.notificationPreferences.ntfy': 'Ntfy', 'settings.notificationPreferences.noChannels': 'Belum ada saluran notifikasi yang dikonfigurasi. Minta admin untuk mengatur notifikasi email atau webhook.', 'settings.webhookUrl.label': 'Webhook URL', 'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...', 'settings.webhookUrl.hint': 'Masukkan URL webhook Discord, Slack, atau kustom untuk menerima notifikasi.', 'settings.webhookUrl.saved': 'Webhook URL tersimpan', 'settings.webhookUrl.test': 'Uji', 'settings.webhookUrl.testSuccess': 'Test webhook berhasil dikirim', 'settings.webhookUrl.testFailed': 'Test webhook gagal', 'settings.ntfyUrl.topicLabel': 'Topik Ntfy', 'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts', 'settings.ntfyUrl.serverLabel': 'URL Server Ntfy (opsional)', 'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh', 'settings.ntfyUrl.hint': 'Masukkan topik Ntfy Anda untuk menerima notifikasi push. Kosongkan bidang server untuk menggunakan default yang dikonfigurasi oleh admin Anda.', 'settings.ntfyUrl.tokenLabel': 'Token Akses (opsional)', 'settings.ntfyUrl.tokenHint': 'Diperlukan untuk topik yang dilindungi kata sandi.', 'settings.ntfyUrl.saved': 'Pengaturan Ntfy tersimpan', 'settings.ntfyUrl.test': 'Uji', 'settings.ntfyUrl.testSuccess': 'Notifikasi uji Ntfy berhasil dikirim', 'settings.ntfyUrl.testFailed': 'Notifikasi uji Ntfy gagal', 'settings.ntfyUrl.tokenCleared': 'Token akses dihapus', 'admin.notifications.title': 'Notifikasi', 'admin.notifications.hint': 'Pilih satu saluran notifikasi. Hanya satu yang bisa aktif sekaligus.', 'admin.notifications.none': 'Dinonaktifkan', 'admin.notifications.email': 'Email (SMTP)', 'admin.notifications.webhook': 'Webhook', 'admin.notifications.save': 'Simpan pengaturan notifikasi', 'admin.notifications.saved': 'Pengaturan notifikasi tersimpan', 'admin.notifications.testWebhook': 'Kirim test webhook', 'admin.notifications.testWebhookSuccess': 'Test webhook berhasil dikirim', 'admin.notifications.testWebhookFailed': 'Test webhook gagal', 'admin.notifications.emailPanel.title': 'Email (SMTP)', 'admin.notifications.webhookPanel.title': 'Webhook', 'admin.notifications.inappPanel.title': 'In-App', 'admin.notifications.inappPanel.hint': 'Notifikasi in-app selalu aktif dan tidak bisa dinonaktifkan secara global.', 'admin.notifications.adminWebhookPanel.title': 'Admin Webhook', 'admin.notifications.adminWebhookPanel.hint': 'Webhook ini digunakan khusus untuk notifikasi admin (mis. peringatan versi). Terpisah dari webhook per pengguna dan selalu berjalan jika diatur.', 'admin.notifications.adminWebhookPanel.saved': 'Admin webhook URL tersimpan', 'admin.notifications.adminWebhookPanel.testSuccess': 'Test webhook berhasil dikirim', 'admin.notifications.adminWebhookPanel.testFailed': 'Test webhook gagal', 'admin.notifications.adminWebhookPanel.alwaysOnHint': 'Admin webhook selalu berjalan jika URL dikonfigurasi', 'admin.notifications.ntfy': 'Ntfy', 'admin.ntfy.hint': 'Memungkinkan pengguna mengonfigurasi topik ntfy mereka sendiri untuk notifikasi push. Tetapkan server default di bawah untuk mengisi setelan pengguna secara otomatis.', 'admin.notifications.testNtfy': 'Kirim uji Ntfy', 'admin.notifications.testNtfySuccess': 'Uji Ntfy berhasil dikirim', 'admin.notifications.testNtfyFailed': 'Uji Ntfy gagal', 'admin.notifications.adminNtfyPanel.title': 'Admin Ntfy', 'admin.notifications.adminNtfyPanel.hint': 'Topik Ntfy ini digunakan khusus untuk notifikasi admin (mis. peringatan versi). Terpisah dari topik per pengguna dan selalu berjalan jika dikonfigurasi.', 'admin.notifications.adminNtfyPanel.serverLabel': 'URL Server Ntfy', 'admin.notifications.adminNtfyPanel.serverHint': 'Juga digunakan sebagai server default untuk notifikasi ntfy pengguna. Kosongkan untuk menggunakan ntfy.sh. Pengguna dapat menggantinya di pengaturan mereka sendiri.', 'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh', 'admin.notifications.adminNtfyPanel.topicLabel': 'Topik Admin', 'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts', 'admin.notifications.adminNtfyPanel.tokenLabel': 'Token Akses (opsional)', 'admin.notifications.adminNtfyPanel.tokenCleared': 'Token akses admin dihapus', 'admin.notifications.adminNtfyPanel.saved': 'Pengaturan Ntfy admin tersimpan', 'admin.notifications.adminNtfyPanel.test': 'Kirim uji Ntfy', 'admin.notifications.adminNtfyPanel.testSuccess': 'Uji Ntfy berhasil dikirim', 'admin.notifications.adminNtfyPanel.testFailed': 'Uji Ntfy gagal', 'admin.notifications.adminNtfyPanel.alwaysOnHint': 'Admin Ntfy selalu berjalan jika topik dikonfigurasi', 'admin.notifications.adminNotificationsHint': 'Atur saluran mana yang mengirimkan notifikasi khusus admin (mis. peringatan versi).', 'admin.smtp.title': 'Email & Notifikasi', 'admin.smtp.hint': 'Konfigurasi SMTP untuk pengiriman notifikasi email.', 'admin.smtp.testButton': 'Kirim email uji', 'admin.webhook.hint': 'Izinkan pengguna mengatur URL webhook sendiri untuk notifikasi (Discord, Slack, dll.).', 'admin.smtp.testSuccess': 'Email uji berhasil dikirim', 'admin.smtp.testFailed': 'Email uji gagal', 'settings.notificationsDisabled': 'Notifikasi belum dikonfigurasi. Minta admin untuk mengaktifkan notifikasi email atau webhook.', 'settings.notificationsActive': 'Saluran aktif', 'settings.notificationsManagedByAdmin': 'Acara notifikasi dikonfigurasi oleh administrator.', 'dayplan.icsTooltip': 'Ekspor kalender (ICS)', 'share.linkTitle': 'Tautan Publik', 'share.linkHint': 'Buat tautan yang bisa digunakan siapa saja untuk melihat perjalanan ini tanpa masuk. Hanya baca — tidak bisa diedit.', 'share.createLink': 'Buat tautan', 'share.deleteLink': 'Hapus tautan', 'share.createError': 'Gagal membuat tautan', 'common.copy': 'Salin', 'common.copied': 'Disalin', 'share.permMap': 'Peta & Rencana', 'share.permBookings': 'Pemesanan', 'share.permPacking': 'Bawaan', 'shared.expired': 'Tautan kedaluwarsa atau tidak valid', 'shared.expiredHint': 'Tautan perjalanan bersama ini tidak lagi aktif.', 'shared.readOnly': 'Tampilan bersama — hanya baca', 'shared.tabPlan': 'Rencana', 'shared.tabBookings': 'Pemesanan', 'shared.tabPacking': 'Bawaan', 'shared.tabBudget': 'Anggaran', 'shared.tabChat': 'Chat', 'shared.days': 'hari', 'shared.places': 'tempat', 'shared.other': 'Lainnya', 'shared.totalBudget': 'Total Anggaran', 'shared.messages': 'pesan', 'shared.sharedVia': 'Dibagikan via', 'shared.confirmed': 'Dikonfirmasi', 'shared.pending': 'Menunggu', 'share.permBudget': 'Anggaran', 'share.permCollab': 'Chat', 'settings.on': 'Aktif', 'settings.off': 'Nonaktif', 'settings.mcp.title': 'Konfigurasi MCP', 'settings.mcp.endpoint': 'MCP Endpoint', 'settings.mcp.clientConfig': 'Konfigurasi Client', 'settings.mcp.clientConfigHint': 'Ganti dengan API token dari daftar di bawah. Path ke npx mungkin perlu disesuaikan untuk sistemmu (mis. C:\\PROGRA~1\\nodejs\\npx.cmd di Windows).', 'settings.mcp.clientConfigHintOAuth': 'Ganti dan dengan kredensial dari klien OAuth 2.1 yang kamu buat di atas. mcp-remote akan membuka browser untuk menyelesaikan otorisasi pertama kali kamu terhubung. Path ke npx mungkin perlu disesuaikan untuk sistemmu (misalnya C:\\PROGRA~1\\nodejs\\npx.cmd di Windows).', 'settings.mcp.copy': 'Salin', 'settings.mcp.copied': 'Disalin!', 'settings.mcp.apiTokens': 'API Tokens', 'settings.mcp.createToken': 'Buat Token Baru', 'settings.mcp.noTokens': 'Belum ada token. Buat satu untuk menghubungkan MCP client.', 'settings.mcp.tokenCreatedAt': 'Dibuat', 'settings.mcp.tokenUsedAt': 'Digunakan', 'settings.mcp.deleteTokenTitle': 'Hapus Token', 'settings.mcp.deleteTokenMessage': 'Token ini akan langsung berhenti bekerja. MCP client yang menggunakannya akan kehilangan akses.', 'settings.mcp.modal.createTitle': 'Buat API Token', 'settings.mcp.modal.tokenName': 'Nama Token', 'settings.mcp.modal.tokenNamePlaceholder': 'mis. Claude Desktop, Laptop kerja', 'settings.mcp.modal.creating': 'Membuat…', 'settings.mcp.modal.create': 'Buat Token', 'settings.mcp.modal.createdTitle': 'Token Dibuat', 'settings.mcp.modal.createdWarning': 'Token ini hanya ditampilkan sekali. Salin dan simpan sekarang — tidak bisa dipulihkan.', 'settings.mcp.modal.done': 'Selesai', 'settings.mcp.toast.created': 'Token dibuat', 'settings.mcp.toast.createError': 'Gagal membuat token', 'settings.mcp.toast.deleted': 'Token dihapus', 'settings.mcp.toast.deleteError': 'Gagal menghapus token', 'settings.mcp.apiTokensDeprecated': 'API Token sudah tidak digunakan dan akan dihapus di rilis mendatang. Gunakan OAuth 2.1 Client sebagai gantinya.', 'settings.oauth.clients': 'Klien OAuth 2.1', 'settings.oauth.clientsHint': 'Daftarkan klien OAuth 2.1 agar aplikasi MCP pihak ketiga (Claude Web, Cursor, dll.) dapat terhubung tanpa token statis.', 'settings.oauth.createClient': 'Klien Baru', 'settings.oauth.noClients': 'Belum ada klien OAuth yang terdaftar.', 'settings.oauth.clientId': 'ID Klien', 'settings.oauth.clientSecret': 'Rahasia Klien', 'settings.oauth.deleteClient': 'Hapus Klien', 'settings.oauth.deleteClientMessage': 'Klien ini dan semua sesi aktif akan dihapus permanen. Aplikasi yang menggunakannya akan langsung kehilangan akses.', 'settings.oauth.rotateSecret': 'Putar Ulang Secret', 'settings.oauth.rotateSecretMessage': 'Secret klien baru akan dibuat dan semua sesi yang ada langsung dibatalkan. Perbarui aplikasimu sebelum menutup dialog ini.', 'settings.oauth.rotateSecretConfirm': 'Putar Ulang', 'settings.oauth.rotateSecretConfirming': 'Memutar ulang…', 'settings.oauth.rotateSecretDoneTitle': 'Secret Baru Dibuat', 'settings.oauth.rotateSecretDoneWarning': 'Secret ini hanya ditampilkan sekali. Salin sekarang dan perbarui aplikasimu — semua sesi sebelumnya telah dibatalkan.', 'settings.oauth.activeSessions': 'Sesi OAuth Aktif', 'settings.oauth.sessionScopes': 'Cakupan', 'settings.oauth.sessionExpires': 'Kedaluwarsa', 'settings.oauth.revoke': 'Cabut', 'settings.oauth.revokeSession': 'Cabut Sesi', 'settings.oauth.revokeSessionMessage': 'Ini akan segera mencabut akses untuk sesi OAuth ini.', 'settings.oauth.modal.createTitle': 'Daftarkan OAuth Client', 'settings.oauth.modal.presets': 'Preset cepat', 'settings.oauth.modal.clientName': 'Nama Aplikasi', 'settings.oauth.modal.clientNamePlaceholder': 'mis. Claude Web, Aplikasi MCP Saya', 'settings.oauth.modal.redirectUris': 'Redirect URI', 'settings.oauth.modal.redirectUrisPlaceholder': 'https://aplikasiku.com/callback\nhttps://aplikasiku.com/auth', 'settings.oauth.modal.redirectUrisHint': 'Satu URI per baris. HTTPS wajib (localhost dikecualikan). Kecocokan tepat diberlakukan.', 'settings.oauth.modal.scopes': 'Cakupan yang Diizinkan', 'settings.oauth.modal.scopesHint': 'list_trips dan get_trip_summary selalu tersedia — tidak perlu cakupan. Keduanya memungkinkan AI menemukan ID perjalanan yang diperlukan untuk menggunakan alat lainnya.', 'settings.oauth.modal.selectAll': 'Pilih semua', 'settings.oauth.modal.deselectAll': 'Batalkan semua', 'settings.oauth.modal.creating': 'Mendaftarkan…', 'settings.oauth.modal.create': 'Daftarkan Client', 'settings.oauth.modal.createdTitle': 'Client Terdaftar', 'settings.oauth.modal.createdWarning': 'Client secret hanya ditampilkan sekali. Salin sekarang — tidak dapat dipulihkan.', 'settings.oauth.toast.createError': 'Gagal mendaftarkan klien OAuth', 'settings.oauth.toast.deleted': 'Klien OAuth dihapus', 'settings.oauth.toast.deleteError': 'Gagal menghapus klien OAuth', 'settings.oauth.toast.revoked': 'Sesi dicabut', 'settings.oauth.toast.revokeError': 'Gagal mencabut sesi', 'settings.oauth.toast.rotateError': 'Gagal memutar ulang client secret', 'settings.account': 'Akun', 'settings.about': 'Tentang', 'settings.about.reportBug': 'Laporkan Bug', 'settings.about.reportBugHint': 'Menemukan masalah? Beri tahu kami', 'settings.about.featureRequest': 'Permintaan Fitur', 'settings.about.featureRequestHint': 'Sarankan fitur baru', 'settings.about.wikiHint': 'Dokumentasi & panduan', 'settings.about.description': 'TREK adalah perencana perjalanan self-hosted yang membantu kamu mengatur perjalanan dari ide pertama hingga kenangan terakhir. Perencanaan harian, anggaran, daftar bawaan, foto dan masih banyak lagi — semua di satu tempat, di servermu sendiri.', 'settings.about.madeWith': 'Dibuat dengan', 'settings.about.madeBy': 'oleh Maurice dan komunitas open-source yang terus berkembang.', 'settings.username': 'Nama pengguna', 'settings.email': 'Email', 'settings.role': 'Peran', 'settings.roleAdmin': 'Administrator', 'settings.oidcLinked': 'Terhubung dengan', 'settings.changePassword': 'Ganti Kata Sandi', 'settings.currentPassword': 'Kata sandi saat ini', 'settings.currentPasswordRequired': 'Kata sandi saat ini wajib diisi', 'settings.newPassword': 'Kata sandi baru', 'settings.confirmPassword': 'Konfirmasi kata sandi baru', 'settings.updatePassword': 'Perbarui kata sandi', 'settings.passwordRequired': 'Masukkan kata sandi saat ini dan kata sandi baru', 'settings.passwordTooShort': 'Kata sandi minimal 8 karakter', 'settings.passwordMismatch': 'Kata sandi tidak cocok', 'settings.passwordWeak': 'Kata sandi harus mengandung huruf besar, huruf kecil, angka, dan karakter khusus', 'settings.passwordChanged': 'Kata sandi berhasil diubah', 'settings.mustChangePassword': 'Kamu harus mengubah kata sandi sebelum melanjutkan. Atur kata sandi baru di bawah ini.', 'settings.deleteAccount': 'Hapus akun', 'settings.deleteAccountTitle': 'Hapus akunmu?', 'settings.deleteAccountWarning': 'Akunmu beserta semua perjalanan, tempat, dan file akan dihapus permanen. Tindakan ini tidak bisa dibatalkan.', 'settings.deleteAccountConfirm': 'Hapus permanen', 'settings.deleteBlockedTitle': 'Penghapusan tidak memungkinkan', 'settings.deleteBlockedMessage': 'Kamu satu-satunya administrator. Promosikan pengguna lain menjadi admin sebelum menghapus akunmu.', 'settings.roleUser': 'Pengguna', 'settings.saveProfile': 'Simpan Profil', 'settings.toast.mapSaved': 'Pengaturan peta tersimpan', 'settings.toast.keysSaved': 'API keys tersimpan', 'settings.toast.displaySaved': 'Pengaturan tampilan tersimpan', 'settings.toast.profileSaved': 'Profil tersimpan', 'settings.uploadAvatar': 'Unggah Foto Profil', 'settings.removeAvatar': 'Hapus Foto Profil', 'settings.avatarUploaded': 'Foto profil diperbarui', 'settings.avatarRemoved': 'Foto profil dihapus', 'settings.avatarError': 'Gagal mengunggah', 'settings.mfa.title': 'Autentikasi dua faktor (2FA)', 'settings.mfa.description': 'Menambahkan langkah kedua saat masuk dengan email dan kata sandi. Gunakan aplikasi autentikator (Google Authenticator, Authy, dll.).', 'settings.mfa.requiredByPolicy': 'Administrator mengharuskan autentikasi dua faktor. Atur aplikasi autentikator di bawah ini sebelum melanjutkan.', 'settings.mfa.backupTitle': 'Kode cadangan', 'settings.mfa.backupDescription': 'Gunakan kode cadangan sekali pakai ini jika kamu kehilangan akses ke aplikasi autentikator.', 'settings.mfa.backupWarning': 'Simpan kode ini sekarang. Setiap kode hanya bisa digunakan sekali.', 'settings.mfa.backupCopy': 'Salin kode', 'settings.mfa.backupDownload': 'Unduh TXT', 'settings.mfa.backupPrint': 'Cetak / PDF', 'settings.mfa.backupCopied': 'Kode cadangan disalin', 'settings.mfa.enabled': '2FA aktif di akunmu.', 'settings.mfa.disabled': '2FA belum diaktifkan.', 'settings.mfa.setup': 'Atur autentikator', 'settings.mfa.scanQr': 'Pindai kode QR ini dengan aplikasimu, atau masukkan secret secara manual.', 'settings.mfa.secretLabel': 'Kunci secret (entri manual)', 'settings.mfa.codePlaceholder': 'Kode 6 digit', 'settings.mfa.enable': 'Aktifkan 2FA', 'settings.mfa.cancelSetup': 'Batal', 'settings.mfa.disableTitle': 'Nonaktifkan 2FA', 'settings.mfa.disableHint': 'Masukkan kata sandi akun dan kode terkini dari aplikasi autentikatormu.', 'settings.mfa.disable': 'Nonaktifkan 2FA', 'settings.mfa.toastEnabled': 'Autentikasi dua faktor diaktifkan', 'settings.mfa.toastDisabled': 'Autentikasi dua faktor dinonaktifkan', 'settings.mfa.demoBlocked': 'Tidak tersedia dalam mode demo', // Login 'login.error': 'Login gagal. Periksa kembali kredensial kamu.', 'login.tagline': 'Perjalananmu.\nRencanamu.', 'login.description': 'Rencanakan perjalanan bersama dengan peta interaktif, anggaran, dan sinkronisasi real-time.', 'login.features.maps': 'Peta Interaktif', 'login.features.mapsDesc': 'Google Places, rute & pengelompokan', 'login.features.realtime': 'Sinkronisasi Real-Time', 'login.features.realtimeDesc': 'Rencanakan bersama via WebSocket', 'login.features.budget': 'Pelacak Anggaran', 'login.features.budgetDesc': 'Kategori, grafik & biaya per orang', 'login.features.collab': 'Kolaborasi', 'login.features.collabDesc': 'Multi-pengguna dengan perjalanan bersama', 'login.features.packing': 'Daftar Packing', 'login.features.packingDesc': 'Kategori, progres & saran', 'login.features.bookings': 'Reservasi', 'login.features.bookingsDesc': 'Penerbangan, hotel, restoran & lainnya', 'login.features.files': 'Dokumen', 'login.features.filesDesc': 'Unggah & kelola dokumen', 'login.features.routes': 'Rute Cerdas', 'login.features.routesDesc': 'Optimasi otomatis & ekspor ke Google Maps', 'login.selfHosted': 'Self-hosted \u00B7 Open Source \u00B7 Datamu tetap milikmu', 'login.title': 'Masuk', 'login.subtitle': 'Selamat datang kembali', 'login.signingIn': 'Sedang masuk…', 'login.signIn': 'Masuk', 'login.createAdmin': 'Buat Akun Admin', 'login.createAdminHint': 'Siapkan akun admin pertama untuk TREK.', 'login.setNewPassword': 'Atur Kata Sandi Baru', 'login.setNewPasswordHint': 'Kamu harus mengganti kata sandi sebelum melanjutkan.', 'login.createAccount': 'Buat Akun', 'login.createAccountHint': 'Daftarkan akun baru.', 'login.creating': 'Membuat…', 'login.noAccount': 'Belum punya akun?', 'login.hasAccount': 'Sudah punya akun?', 'login.register': 'Daftar', 'login.emailPlaceholder': 'kamu@email.com', 'login.username': 'Nama pengguna', 'login.oidc.registrationDisabled': 'Pendaftaran dinonaktifkan. Hubungi administrator kamu.', 'login.oidc.noEmail': 'Tidak ada email yang diterima dari penyedia.', 'login.oidc.tokenFailed': 'Autentikasi gagal.', 'login.oidc.invalidState': 'Sesi tidak valid. Coba lagi.', 'login.demoFailed': 'Login demo gagal', 'login.oidcSignIn': 'Masuk dengan {name}', 'login.oidcOnly': 'Autentikasi kata sandi dinonaktifkan. Masuk menggunakan penyedia SSO kamu.', 'login.oidcLoggedOut': 'Kamu telah keluar. Masuk kembali menggunakan penyedia SSO kamu.', 'login.demoHint': 'Coba demo — tidak perlu registrasi', 'login.mfaTitle': 'Autentikasi dua faktor', 'login.mfaSubtitle': 'Masukkan kode 6 digit dari aplikasi autentikator kamu.', 'login.mfaCodeLabel': 'Kode verifikasi', 'login.mfaCodeRequired': 'Masukkan kode dari aplikasi autentikator kamu.', 'login.mfaHint': 'Buka Google Authenticator, Authy, atau aplikasi TOTP lainnya.', 'login.mfaBack': '← Kembali ke halaman masuk', 'login.mfaVerify': 'Verifikasi', 'login.invalidInviteLink': 'Tautan undangan tidak valid atau sudah kedaluwarsa', 'login.oidcFailed': 'Login OIDC gagal', 'login.usernameRequired': 'Nama pengguna wajib diisi', 'login.passwordMinLength': 'Kata sandi minimal 8 karakter', // Register 'register.passwordMismatch': 'Kata sandi tidak cocok', 'register.passwordTooShort': 'Kata sandi minimal 8 karakter', 'register.failed': 'Pendaftaran gagal', 'register.getStarted': 'Mulai Sekarang', 'register.subtitle': 'Buat akun dan mulai rencanakan perjalanan impianmu.', 'register.feature1': 'Rencana perjalanan tak terbatas', 'register.feature2': 'Tampilan peta interaktif', 'register.feature3': 'Kelola tempat dan kategori', 'register.feature4': 'Lacak reservasi', 'register.feature5': 'Buat daftar packing', 'register.feature6': 'Simpan foto dan file', 'register.createAccount': 'Buat Akun', 'register.startPlanning': 'Mulai rencanakan perjalananmu', 'register.minChars': 'Min. 6 karakter', 'register.confirmPassword': 'Konfirmasi Kata Sandi', 'register.repeatPassword': 'Ulangi kata sandi', 'register.registering': 'Mendaftar...', 'register.register': 'Daftar', 'register.hasAccount': 'Sudah punya akun?', 'register.signIn': 'Masuk', // Admin 'admin.title': 'Administrasi', 'admin.subtitle': 'Manajemen pengguna dan pengaturan sistem', 'admin.tabs.users': 'Pengguna', 'admin.tabs.categories': 'Kategori', 'admin.tabs.backup': 'Backup', 'admin.tabs.notifications': 'Notifikasi', 'admin.tabs.audit': 'Audit', 'admin.stats.users': 'Pengguna', 'admin.stats.trips': 'Perjalanan', 'admin.stats.places': 'Tempat', 'admin.stats.photos': 'Foto', 'admin.stats.files': 'File', 'admin.table.user': 'Pengguna', 'admin.table.email': 'Email', 'admin.table.role': 'Peran', 'admin.table.created': 'Dibuat', 'admin.table.lastLogin': 'Login Terakhir', 'admin.table.actions': 'Tindakan', 'admin.you': '(Kamu)', 'admin.editUser': 'Edit Pengguna', 'admin.newPassword': 'Kata Sandi Baru', 'admin.newPasswordHint': 'Kosongkan untuk mempertahankan kata sandi saat ini', 'admin.deleteUser': 'Hapus pengguna "{name}"? Semua perjalanan akan dihapus secara permanen.', 'admin.deleteUserTitle': 'Hapus pengguna', 'admin.newPasswordPlaceholder': 'Masukkan kata sandi baru…', 'admin.toast.loadError': 'Gagal memuat data admin', 'admin.toast.userUpdated': 'Pengguna diperbarui', 'admin.toast.updateError': 'Gagal memperbarui', 'admin.toast.userDeleted': 'Pengguna dihapus', 'admin.toast.deleteError': 'Gagal menghapus', 'admin.toast.cannotDeleteSelf': 'Tidak bisa menghapus akun sendiri', 'admin.toast.userCreated': 'Pengguna dibuat', 'admin.toast.createError': 'Gagal membuat pengguna', 'admin.toast.fieldsRequired': 'Nama pengguna, email, dan kata sandi wajib diisi', 'admin.createUser': 'Buat Pengguna', 'admin.invite.title': 'Tautan Undangan', 'admin.invite.subtitle': 'Buat tautan pendaftaran sekali pakai', 'admin.invite.create': 'Buat Tautan', 'admin.invite.createAndCopy': 'Buat & Salin', 'admin.invite.empty': 'Belum ada tautan undangan yang dibuat', 'admin.invite.maxUses': 'Maks. Penggunaan', 'admin.invite.expiry': 'Kedaluwarsa setelah', 'admin.invite.uses': 'digunakan', 'admin.invite.expiresAt': 'kedaluwarsa', 'admin.invite.createdBy': 'oleh', 'admin.invite.active': 'Aktif', 'admin.invite.expired': 'Kedaluwarsa', 'admin.invite.usedUp': 'Habis dipakai', 'admin.invite.copied': 'Tautan undangan disalin ke clipboard', 'admin.invite.copyLink': 'Salin tautan', 'admin.invite.deleted': 'Tautan undangan dihapus', 'admin.invite.createError': 'Gagal membuat tautan undangan', 'admin.invite.deleteError': 'Gagal menghapus tautan undangan', 'admin.tabs.settings': 'Pengaturan', 'admin.allowRegistration': 'Izinkan Pendaftaran', 'admin.allowRegistrationHint': 'Pengguna baru dapat mendaftar sendiri', 'admin.authMethods': 'Metode Autentikasi', 'admin.passwordLogin': 'Login dengan Kata Sandi', 'admin.passwordLoginHint': 'Izinkan pengguna masuk dengan email dan kata sandi', 'admin.passwordRegistration': 'Pendaftaran dengan Kata Sandi', 'admin.passwordRegistrationHint': 'Izinkan pengguna baru mendaftar dengan email dan kata sandi', 'admin.oidcLogin': 'Login SSO', 'admin.oidcLoginHint': 'Izinkan pengguna masuk dengan SSO', 'admin.oidcRegistration': 'Penyediaan Otomatis SSO', 'admin.oidcRegistrationHint': 'Buat akun otomatis untuk pengguna SSO baru', 'admin.envOverrideHint': 'Pengaturan login kata sandi dikendalikan oleh variabel lingkungan OIDC_ONLY dan tidak dapat diubah di sini.', 'admin.lockoutWarning': 'Minimal satu metode login harus tetap aktif', 'admin.requireMfa': 'Wajibkan autentikasi dua faktor (2FA)', 'admin.requireMfaHint': 'Pengguna tanpa 2FA harus menyelesaikan pengaturan di Pengaturan sebelum menggunakan aplikasi.', 'admin.apiKeys': 'Kunci API', 'admin.apiKeysHint': 'Opsional. Mengaktifkan data tempat yang lebih lengkap seperti foto dan cuaca.', 'admin.mapsKey': 'Kunci API Google Maps', 'admin.mapsKeyHint': 'Diperlukan untuk pencarian tempat. Dapatkan di console.cloud.google.com', 'admin.mapsKeyHintLong': 'Tanpa kunci API, OpenStreetMap digunakan untuk pencarian tempat. Dengan kunci API Google, foto, rating, dan jam buka juga bisa dimuat. Dapatkan di console.cloud.google.com.', 'admin.recommended': 'Direkomendasikan', 'admin.weatherKey': 'Kunci API OpenWeatherMap', 'admin.weatherKeyHint': 'Untuk data cuaca. Gratis di openweathermap.org', 'admin.validateKey': 'Uji', 'admin.keyValid': 'Terhubung', 'admin.keyInvalid': 'Tidak valid', 'admin.keySaved': 'Kunci API disimpan', 'admin.oidcTitle': 'Single Sign-On (OIDC)', 'admin.oidcSubtitle': 'Izinkan login melalui penyedia eksternal seperti Google, Apple, Authentik, atau Keycloak.', 'admin.oidcDisplayName': 'Nama Tampilan', 'admin.oidcIssuer': 'Issuer URL', 'admin.oidcIssuerHint': 'Issuer URL OpenID Connect dari penyedia. Contoh: https://accounts.google.com', 'admin.oidcSaved': 'Konfigurasi OIDC disimpan', 'admin.oidcOnlyMode': 'Nonaktifkan autentikasi kata sandi', 'admin.oidcOnlyModeHint': 'Jika diaktifkan, hanya login SSO yang diizinkan. Login dan pendaftaran berbasis kata sandi diblokir.', // File Types 'admin.fileTypes': 'Jenis File yang Diizinkan', 'admin.fileTypesHint': 'Atur jenis file apa saja yang boleh diunggah pengguna.', 'admin.fileTypesFormat': 'Ekstensi dipisahkan koma (contoh: jpg,png,pdf,doc). Gunakan * untuk mengizinkan semua jenis.', 'admin.fileTypesSaved': 'Pengaturan jenis file disimpan', // Packing Templates & Bag Tracking 'admin.bagTracking.title': 'Pelacak Tas', 'admin.bagTracking.subtitle': 'Aktifkan berat dan penugasan tas untuk item packing', 'admin.collab.chat.title': 'Chat', 'admin.collab.chat.subtitle': 'Pesan real-time untuk kolaborasi', 'admin.collab.notes.title': 'Catatan', 'admin.collab.notes.subtitle': 'Catatan dan dokumen bersama', 'admin.collab.polls.title': 'Jajak Pendapat', 'admin.collab.polls.subtitle': 'Jajak pendapat dan voting grup', 'admin.collab.whatsnext.title': 'Selanjutnya', 'admin.collab.whatsnext.subtitle': 'Saran aktivitas dan langkah selanjutnya', 'admin.tabs.config': 'Personalisasi', 'admin.tabs.defaults': 'Pengaturan Default Pengguna', 'admin.defaultSettings.title': 'Pengaturan Default Pengguna', 'admin.defaultSettings.description': 'Tetapkan nilai default untuk seluruh instance. Pengguna yang belum mengubah pengaturan akan melihat nilai-nilai ini. Perubahan mereka sendiri selalu diprioritaskan.', 'admin.defaultSettings.saved': 'Default disimpan', 'admin.defaultSettings.reset': 'Atur ulang ke default bawaan', 'admin.defaultSettings.resetToBuiltIn': 'atur ulang', 'admin.tabs.templates': 'Template Packing', 'admin.packingTemplates.title': 'Template Packing', 'admin.packingTemplates.subtitle': 'Buat daftar packing yang bisa digunakan ulang untuk perjalananmu', 'admin.packingTemplates.create': 'Template Baru', 'admin.packingTemplates.namePlaceholder': 'Nama template (contoh: Liburan Pantai)', 'admin.packingTemplates.empty': 'Belum ada template yang dibuat', 'admin.packingTemplates.items': 'item', 'admin.packingTemplates.categories': 'kategori', 'admin.packingTemplates.itemName': 'Nama item', 'admin.packingTemplates.itemCategory': 'Kategori', 'admin.packingTemplates.categoryName': 'Nama kategori (contoh: Pakaian)', 'admin.packingTemplates.addCategory': 'Tambah kategori', 'admin.packingTemplates.created': 'Template dibuat', 'admin.packingTemplates.deleted': 'Template dihapus', 'admin.packingTemplates.loadError': 'Gagal memuat template', 'admin.packingTemplates.createError': 'Gagal membuat template', 'admin.packingTemplates.deleteError': 'Gagal menghapus template', 'admin.packingTemplates.saveError': 'Gagal menyimpan', // Addons 'admin.tabs.addons': 'Addon', 'admin.addons.title': 'Addon', 'admin.addons.subtitle': 'Aktifkan atau nonaktifkan fitur untuk menyesuaikan pengalaman TREK kamu.', 'admin.addons.catalog.packing.name': 'Daftar', 'admin.addons.catalog.packing.description': 'Daftar packing dan tugas to-do untuk perjalananmu', 'admin.addons.catalog.budget.name': 'Anggaran', 'admin.addons.catalog.budget.description': 'Lacak pengeluaran dan rencanakan anggaran perjalananmu', 'admin.addons.catalog.documents.name': 'Dokumen', 'admin.addons.catalog.documents.description': 'Simpan dan kelola dokumen perjalanan', 'admin.addons.catalog.vacay.name': 'Vacay', 'admin.addons.catalog.vacay.description': 'Perencana liburan pribadi dengan tampilan kalender', 'admin.addons.catalog.atlas.name': 'Atlas', 'admin.addons.catalog.atlas.description': 'Peta dunia dengan negara yang pernah dikunjungi dan statistik perjalanan', 'admin.addons.catalog.collab.name': 'Collab', 'admin.addons.catalog.collab.description': 'Catatan real-time, polling, dan chat untuk perencanaan perjalanan', 'admin.addons.catalog.memories.name': 'Foto (Immich)', 'admin.addons.catalog.memories.description': 'Bagikan foto perjalanan melalui instans Immich kamu', 'admin.addons.catalog.mcp.name': 'MCP', 'admin.addons.catalog.mcp.description': 'Model Context Protocol untuk integrasi asisten AI', 'admin.addons.subtitleBefore': 'Aktifkan atau nonaktifkan fitur untuk menyesuaikan ', 'admin.addons.subtitleAfter': ' kamu.', 'admin.addons.enabled': 'Aktif', 'admin.addons.disabled': 'Nonaktif', 'admin.addons.type.trip': 'Perjalanan', 'admin.addons.type.global': 'Global', 'admin.addons.type.integration': 'Integrasi', 'admin.addons.tripHint': 'Tersedia sebagai tab di setiap perjalanan', 'admin.addons.globalHint': 'Tersedia sebagai bagian mandiri di navigasi utama', 'admin.addons.integrationHint': 'Layanan backend dan integrasi API tanpa halaman tersendiri', 'admin.addons.toast.updated': 'Addon diperbarui', 'admin.addons.toast.error': 'Gagal memperbarui addon', 'admin.addons.noAddons': 'Tidak ada addon yang tersedia', // Weather info 'admin.weather.title': 'Data Cuaca', 'admin.weather.badge': 'Sejak 24 Maret 2026', 'admin.weather.description': 'TREK menggunakan Open-Meteo sebagai sumber data cuaca. Open-Meteo adalah layanan cuaca gratis dan open-source — tidak perlu kunci API.', 'admin.weather.forecast': 'Prakiraan 16 hari', 'admin.weather.forecastDesc': 'Sebelumnya 5 hari (OpenWeatherMap)', 'admin.weather.climate': 'Data iklim historis', 'admin.weather.climateDesc': 'Rata-rata dari 85 tahun terakhir untuk hari di luar prakiraan 16 hari', 'admin.weather.requests': '10.000 permintaan / hari', 'admin.weather.requestsDesc': 'Gratis, tidak perlu kunci API', 'admin.weather.locationHint': 'Cuaca didasarkan pada tempat pertama dengan koordinat di setiap hari. Jika tidak ada tempat yang ditetapkan untuk suatu hari, tempat mana pun dari daftar tempat digunakan sebagai referensi.', // GitHub 'admin.tabs.mcpTokens': 'Akses MCP', 'admin.mcpTokens.title': 'Akses MCP', 'admin.mcpTokens.subtitle': 'Kelola sesi OAuth dan token API di semua pengguna', 'admin.mcpTokens.sectionTitle': 'Token API', 'admin.mcpTokens.owner': 'Pemilik', 'admin.mcpTokens.tokenName': 'Nama Token', 'admin.mcpTokens.created': 'Dibuat', 'admin.mcpTokens.lastUsed': 'Terakhir Digunakan', 'admin.mcpTokens.never': 'Tidak pernah', 'admin.mcpTokens.empty': 'Belum ada token MCP yang dibuat', 'admin.mcpTokens.deleteTitle': 'Hapus Token', 'admin.mcpTokens.deleteMessage': 'Ini akan mencabut token segera. Pengguna akan kehilangan akses MCP melalui token ini.', 'admin.mcpTokens.deleteSuccess': 'Token dihapus', 'admin.mcpTokens.deleteError': 'Gagal menghapus token', 'admin.mcpTokens.loadError': 'Gagal memuat token', 'admin.oauthSessions.sectionTitle': 'Sesi OAuth', 'admin.oauthSessions.clientName': 'Klien', 'admin.oauthSessions.owner': 'Pemilik', 'admin.oauthSessions.scopes': 'Cakupan', 'admin.oauthSessions.created': 'Dibuat', 'admin.oauthSessions.empty': 'Tidak ada sesi OAuth aktif', 'admin.oauthSessions.revokeTitle': 'Cabut Sesi', 'admin.oauthSessions.revokeMessage': 'Ini akan segera mencabut sesi OAuth. Client akan kehilangan akses MCP.', 'admin.oauthSessions.revokeSuccess': 'Sesi dicabut', 'admin.oauthSessions.revokeError': 'Gagal mencabut sesi', 'admin.oauthSessions.loadError': 'Gagal memuat sesi OAuth', 'admin.tabs.github': 'GitHub', 'admin.audit.subtitle': 'Peristiwa sensitif keamanan dan administrasi (backup, pengguna, MFA, pengaturan).', 'admin.audit.empty': 'Belum ada entri audit.', 'admin.audit.refresh': 'Segarkan', 'admin.audit.loadMore': 'Muat lebih banyak', 'admin.audit.showing': '{count} dimuat · {total} total', 'admin.audit.col.time': 'Waktu', 'admin.audit.col.user': 'Pengguna', 'admin.audit.col.action': 'Tindakan', 'admin.audit.col.resource': 'Sumber Daya', 'admin.audit.col.ip': 'IP', 'admin.audit.col.details': 'Detail', 'admin.github.title': 'Riwayat Rilis', 'admin.github.subtitle': 'Pembaruan terbaru dari {repo}', 'admin.github.latest': 'Terbaru', 'admin.github.prerelease': 'Pra-rilis', 'admin.github.showDetails': 'Tampilkan detail', 'admin.github.hideDetails': 'Sembunyikan detail', 'admin.github.loadMore': 'Muat lebih banyak', 'admin.github.loading': 'Memuat...', 'admin.github.error': 'Gagal memuat rilis', 'admin.github.by': 'oleh', 'admin.github.support': 'Bantu saya terus mengembangkan TREK', 'admin.update.available': 'Pembaruan tersedia', 'admin.update.text': 'TREK {version} tersedia. Kamu menggunakan {current}.', 'admin.update.button': 'Lihat di GitHub', 'admin.update.install': 'Pasang Pembaruan', 'admin.update.confirmTitle': 'Pasang Pembaruan?', 'admin.update.confirmText': 'TREK akan diperbarui dari {current} ke {version}. Server akan restart otomatis setelahnya.', 'admin.update.dataInfo': 'Semua datamu (perjalanan, pengguna, kunci API, unggahan, Vacay, Atlas, anggaran) akan dipertahankan.', 'admin.update.warning': 'Aplikasi akan tidak tersedia sebentar selama restart.', 'admin.update.confirm': 'Perbarui Sekarang', 'admin.update.installing': 'Memperbarui…', 'admin.update.success': 'Pembaruan terpasang! Server sedang restart…', 'admin.update.failed': 'Pembaruan gagal', 'admin.update.backupHint': 'Kami merekomendasikan membuat backup sebelum memperbarui.', 'admin.update.backupLink': 'Pergi ke Backup', 'admin.update.howTo': 'Cara Memperbarui', 'admin.update.dockerText': 'Instans TREK kamu berjalan di Docker. Untuk memperbarui ke {version}, jalankan perintah berikut di servermu:', 'admin.update.reloadHint': 'Muat ulang halaman dalam beberapa detik.', // Vacay addon 'vacay.subtitle': 'Rencanakan dan kelola hari cuti', 'vacay.settings': 'Pengaturan', 'vacay.year': 'Tahun', 'vacay.addYear': 'Tambah tahun berikutnya', 'vacay.addPrevYear': 'Tambah tahun sebelumnya', 'vacay.removeYear': 'Hapus tahun', 'vacay.removeYearConfirm': 'Hapus {year}?', 'vacay.removeYearHint': 'Semua entri cuti dan hari libur perusahaan untuk tahun ini akan dihapus secara permanen.', 'vacay.remove': 'Hapus', 'vacay.persons': 'Orang', 'vacay.noPersons': 'Belum ada orang ditambahkan', 'vacay.addPerson': 'Tambah Orang', 'vacay.editPerson': 'Edit Orang', 'vacay.removePerson': 'Hapus Orang', 'vacay.removePersonConfirm': 'Hapus {name}?', 'vacay.removePersonHint': 'Semua entri cuti untuk orang ini akan dihapus secara permanen.', 'vacay.personName': 'Nama', 'vacay.personNamePlaceholder': 'Masukkan nama', 'vacay.color': 'Warna', 'vacay.add': 'Tambah', 'vacay.legend': 'Keterangan', 'vacay.publicHoliday': 'Hari Libur Nasional', 'vacay.companyHoliday': 'Hari Libur Perusahaan', 'vacay.weekend': 'Akhir Pekan', 'vacay.modeVacation': 'Cuti', 'vacay.modeCompany': 'Hari Libur Perusahaan', 'vacay.entitlement': 'Jatah Cuti', 'vacay.entitlementDays': 'Hari', 'vacay.used': 'Terpakai', 'vacay.remaining': 'Sisa', 'vacay.carriedOver': 'dari {year}', 'vacay.blockWeekends': 'Blokir Akhir Pekan', 'vacay.blockWeekendsHint': 'Cegah entri cuti pada hari akhir pekan', 'vacay.weekendDays': 'Hari akhir pekan', 'vacay.mon': 'Sen', 'vacay.tue': 'Sel', 'vacay.wed': 'Rab', 'vacay.thu': 'Kam', 'vacay.fri': 'Jum', 'vacay.sat': 'Sab', 'vacay.sun': 'Min', 'vacay.publicHolidays': 'Hari Libur Nasional', 'vacay.publicHolidaysHint': 'Tandai hari libur nasional di kalender', 'vacay.selectCountry': 'Pilih negara', 'vacay.selectRegion': 'Pilih wilayah (opsional)', 'vacay.addCalendar': 'Tambah kalender', 'vacay.calendarLabel': 'Label (opsional)', 'vacay.calendarColor': 'Warna', 'vacay.noCalendars': 'Belum ada kalender hari libur ditambahkan', 'vacay.companyHolidays': 'Hari Libur Perusahaan', 'vacay.companyHolidaysHint': 'Izinkan penandaan hari libur seluruh perusahaan', 'vacay.companyHolidaysNoDeduct': 'Hari libur perusahaan tidak dipotong dari jatah cuti.', 'vacay.weekStart': 'Awal minggu', 'vacay.weekStartHint': 'Pilih apakah minggu kalender dimulai pada hari Senin atau Minggu', 'vacay.carryOver': 'Carry Over Cuti', 'vacay.carryOverHint': 'Otomatis pindahkan sisa hari cuti ke tahun berikutnya', 'vacay.sharing': 'Berbagi', 'vacay.sharingHint': 'Bagikan rencana cuti kamu dengan pengguna TREK lainnya', 'vacay.owner': 'Pemilik', 'vacay.shareEmailPlaceholder': 'Email pengguna TREK', 'vacay.shareSuccess': 'Rencana berhasil dibagikan', 'vacay.shareError': 'Gagal membagikan rencana', 'vacay.dissolve': 'Pisahkan Gabungan', 'vacay.dissolveHint': 'Pisahkan kalender kembali. Entri kamu akan tetap disimpan.', 'vacay.dissolveAction': 'Pisahkan', 'vacay.dissolved': 'Kalender dipisahkan', 'vacay.fusedWith': 'Digabung dengan', 'vacay.you': 'kamu', 'vacay.noData': 'Tidak ada data', 'vacay.changeColor': 'Ganti warna', 'vacay.inviteUser': 'Undang Pengguna', 'vacay.inviteHint': 'Undang pengguna TREK lain untuk berbagi kalender cuti bersama.', 'vacay.selectUser': 'Pilih pengguna', 'vacay.sendInvite': 'Kirim Undangan', 'vacay.inviteSent': 'Undangan terkirim', 'vacay.inviteError': 'Gagal mengirim undangan', 'vacay.pending': 'menunggu', 'vacay.noUsersAvailable': 'Tidak ada pengguna tersedia', 'vacay.accept': 'Terima', 'vacay.decline': 'Tolak', 'vacay.acceptFusion': 'Terima & Gabung', 'vacay.inviteTitle': 'Permintaan Penggabungan', 'vacay.inviteWantsToFuse': 'ingin berbagi kalender cuti bersamamu.', 'vacay.fuseInfo1': 'Kalian berdua akan melihat semua entri cuti dalam satu kalender bersama.', 'vacay.fuseInfo2': 'Kedua pihak dapat membuat dan mengedit entri satu sama lain.', 'vacay.fuseInfo3': 'Kedua pihak dapat menghapus entri dan mengubah jatah cuti.', 'vacay.fuseInfo4': 'Pengaturan seperti hari libur nasional dan hari libur perusahaan dibagikan bersama.', 'vacay.fuseInfo5': 'Penggabungan dapat dipisahkan kapan saja oleh salah satu pihak. Entri kamu akan tetap disimpan.', 'nav.myTrips': 'Perjalananku', // Atlas addon 'atlas.subtitle': 'Jejak perjalananmu di seluruh dunia', 'atlas.countries': 'Negara', 'atlas.trips': 'Perjalanan', 'atlas.places': 'Tempat', 'atlas.unmark': 'Hapus', 'atlas.confirmMark': 'Tandai negara ini sebagai sudah dikunjungi?', 'atlas.confirmUnmark': 'Hapus negara ini dari daftar kunjunganmu?', 'atlas.confirmUnmarkRegion': 'Hapus wilayah ini dari daftar kunjunganmu?', 'atlas.markVisited': 'Tandai sudah dikunjungi', 'atlas.markVisitedHint': 'Tambahkan negara ini ke daftar kunjunganmu', 'atlas.markRegionVisitedHint': 'Tambahkan wilayah ini ke daftar kunjunganmu', 'atlas.addToBucket': 'Tambah ke bucket list', 'atlas.addPoi': 'Tambah tempat', 'atlas.searchCountry': 'Cari negara...', 'atlas.bucketNamePlaceholder': 'Nama (negara, kota, tempat...)', 'atlas.month': 'Bulan', 'atlas.year': 'Tahun', 'atlas.addToBucketHint': 'Simpan sebagai tempat yang ingin dikunjungi', 'atlas.bucketWhen': 'Kapan kamu berencana mengunjunginya?', 'atlas.statsTab': 'Statistik', 'atlas.bucketTab': 'Daftar Impian', 'atlas.addBucket': 'Tambah ke daftar impian', 'atlas.bucketNotesPlaceholder': 'Catatan (opsional)', 'atlas.bucketEmpty': 'Daftar impianmu masih kosong', 'atlas.bucketEmptyHint': 'Tambahkan tempat-tempat yang ingin kamu kunjungi', 'atlas.days': 'Hari', 'atlas.visitedCountries': 'Negara yang Dikunjungi', 'atlas.cities': 'Kota', 'atlas.noData': 'Belum ada data perjalanan', 'atlas.noDataHint': 'Buat perjalanan dan tambahkan tempat untuk melihat peta duniamu', 'atlas.lastTrip': 'Perjalanan terakhir', 'atlas.nextTrip': 'Perjalanan berikutnya', 'atlas.daysLeft': 'hari lagi', 'atlas.streak': 'Rentetan', 'atlas.years': 'tahun', 'atlas.yearInRow': 'tahun berturut-turut', 'atlas.yearsInRow': 'tahun berturut-turut', 'atlas.tripIn': 'perjalanan ke', 'atlas.tripsIn': 'perjalanan ke', 'atlas.since': 'sejak', 'atlas.europe': 'Eropa', 'atlas.asia': 'Asia', 'atlas.northAmerica': 'Amerika Utara', 'atlas.southAmerica': 'Amerika Selatan', 'atlas.africa': 'Afrika', 'atlas.oceania': 'Oseania', 'atlas.other': 'Lainnya', 'atlas.firstVisit': 'Perjalanan pertama', 'atlas.lastVisitLabel': 'Perjalanan terakhir', 'atlas.tripSingular': 'Perjalanan', 'atlas.tripPlural': 'Perjalanan', 'atlas.placeVisited': 'Tempat dikunjungi', 'atlas.placesVisited': 'Tempat dikunjungi', // Trip Planner 'trip.tabs.plan': 'Rencana', 'trip.tabs.reservations': 'Pemesanan', 'trip.tabs.reservationsShort': 'Pesan', 'trip.tabs.packing': 'Daftar Perlengkapan', 'trip.tabs.packingShort': 'Perlengkapan', 'trip.tabs.lists': 'Daftar', 'trip.tabs.listsShort': 'Daftar', 'trip.tabs.budget': 'Anggaran', 'trip.tabs.files': 'File', 'trip.loading': 'Memuat perjalanan...', 'trip.loadingPhotos': 'Memuat foto tempat...', 'trip.mobilePlan': 'Rencana', 'trip.mobilePlaces': 'Tempat', 'trip.toast.placeUpdated': 'Tempat diperbarui', 'trip.toast.placeAdded': 'Tempat ditambahkan', 'trip.toast.placeDeleted': 'Tempat dihapus', 'trip.toast.selectDay': 'Pilih hari terlebih dahulu', 'trip.toast.assignedToDay': 'Tempat ditambahkan ke hari', 'trip.toast.reorderError': 'Gagal mengurutkan ulang', 'trip.toast.reservationUpdated': 'Reservasi diperbarui', 'trip.toast.reservationAdded': 'Reservasi ditambahkan', 'trip.toast.deleted': 'Dihapus', 'trip.confirm.deletePlace': 'Apakah kamu yakin ingin menghapus tempat ini?', // Day Plan Sidebar 'dayplan.emptyDay': 'Belum ada tempat yang direncanakan untuk hari ini', 'dayplan.cannotReorderTransport': 'Pemesanan dengan waktu tetap tidak bisa diurutkan ulang', 'dayplan.confirmRemoveTimeTitle': 'Hapus waktu?', 'dayplan.confirmRemoveTimeBody': 'Tempat ini memiliki waktu tetap ({time}). Memindahkannya akan menghapus waktu dan mengizinkan pengurutan bebas.', 'dayplan.confirmRemoveTimeAction': 'Hapus waktu & pindahkan', 'dayplan.cannotDropOnTimed': 'Item tidak dapat ditempatkan di antara entri yang terikat waktu', 'dayplan.cannotBreakChronology': 'Ini akan merusak urutan kronologis item bertanggal dan pemesanan', 'dayplan.addNote': 'Tambah Catatan', 'dayplan.editNote': 'Edit Catatan', 'dayplan.noteAdd': 'Tambah Catatan', 'dayplan.noteEdit': 'Edit Catatan', 'dayplan.noteTitle': 'Catatan', 'dayplan.noteSubtitle': 'Catatan Harian', 'dayplan.totalCost': 'Total Biaya', 'dayplan.days': 'Hari', 'dayplan.dayN': 'Hari {n}', 'dayplan.calculating': 'Menghitung...', 'dayplan.route': 'Rute', 'dayplan.optimize': 'Optimalkan', 'dayplan.optimized': 'Rute dioptimalkan', 'dayplan.routeError': 'Gagal menghitung rute', 'dayplan.toast.needTwoPlaces': 'Diperlukan minimal dua tempat untuk optimasi rute', 'dayplan.toast.routeOptimized': 'Rute dioptimalkan', 'dayplan.toast.noGeoPlaces': 'Tidak ditemukan tempat dengan koordinat untuk kalkulasi rute', 'dayplan.confirmed': 'Dikonfirmasi', 'dayplan.pendingRes': 'Menunggu', 'dayplan.pdf': 'PDF', 'dayplan.pdfTooltip': 'Ekspor rencana hari sebagai PDF', 'dayplan.pdfError': 'Gagal mengekspor PDF', // Places Sidebar 'places.addPlace': 'Tambah Tempat/Aktivitas', 'places.importFile': 'Impor file', 'places.sidebarDrop': 'Lepas untuk mengimpor', 'places.importFileHint': 'Impor file .gpx, .kml, atau .kmz dari Google My Maps, Google Earth, atau pelacak GPS.', 'places.importFileDropHere': 'Klik untuk memilih file atau seret dan lepas di sini', 'places.importFileDropActive': 'Lepas file untuk memilih', 'places.importFileUnsupported': 'Jenis file tidak didukung. Gunakan .gpx, .kml, atau .kmz.', 'places.importFileTooLarge': 'File terlalu besar. Ukuran unggah maksimum adalah {maxMb} MB.', 'places.importFileError': 'Impor gagal', 'places.importAllSkipped': 'Semua tempat sudah ada di perjalanan.', 'places.gpxImported': '{count} tempat diimpor dari GPX', 'places.kmlKmzImported': '{count} tempat diimpor dari KMZ/KML', 'places.urlResolved': 'Tempat diimpor dari URL', 'places.importList': 'Impor Daftar', 'places.kmlKmzSummaryValues': 'Placemark: {total} • Diimpor: {created} • Dilewati: {skipped}', 'places.importGoogleList': 'Daftar Google', 'places.importNaverList': 'Daftar Naver', 'places.googleListHint': 'Tempel tautan daftar Google Maps yang dibagikan untuk mengimpor semua tempat.', 'places.googleListImported': '{count} tempat diimpor dari "{list}"', 'places.googleListError': 'Gagal mengimpor daftar Google Maps', 'places.naverListHint': 'Tempel tautan daftar Naver Maps yang dibagikan untuk mengimpor semua tempat.', 'places.naverListImported': '{count} tempat diimpor dari "{list}"', 'places.naverListError': 'Gagal mengimpor daftar Naver Maps', 'places.viewDetails': 'Lihat Detail', 'places.assignToDay': 'Tambah ke hari mana?', 'places.all': 'Semua', 'places.unplanned': 'Belum direncanakan', 'places.search': 'Cari tempat...', 'places.allCategories': 'Semua Kategori', 'places.categoriesSelected': 'kategori', 'places.clearFilter': 'Hapus filter', 'places.count': '{count} tempat', 'places.countSingular': '1 tempat', 'places.allPlanned': 'Semua tempat sudah direncanakan', 'places.noneFound': 'Tidak ada tempat ditemukan', 'places.editPlace': 'Edit Tempat', 'places.formName': 'Nama', 'places.formNamePlaceholder': 'mis. Menara Eiffel', 'places.formDescription': 'Deskripsi', 'places.formDescriptionPlaceholder': 'Deskripsi singkat...', 'places.formAddress': 'Alamat', 'places.formAddressPlaceholder': 'Jalan, Kota, Negara', 'places.formLat': 'Lintang (mis. 48.8566)', 'places.formLng': 'Bujur (mis. 2.3522)', 'places.formCategory': 'Kategori', 'places.noCategory': 'Tanpa Kategori', 'places.categoryNamePlaceholder': 'Nama kategori', 'places.formTime': 'Waktu', 'places.startTime': 'Mulai', 'places.endTime': 'Selesai', 'places.endTimeBeforeStart': 'Waktu selesai lebih awal dari waktu mulai', 'places.timeCollision': 'Waktu tumpang tindih dengan:', 'places.formWebsite': 'Situs web', 'places.formNotes': 'Catatan', 'places.formNotesPlaceholder': 'Catatan pribadi...', 'places.formReservation': 'Reservasi', 'places.reservationNotesPlaceholder': 'Catatan reservasi, nomor konfirmasi...', 'places.mapsSearchPlaceholder': 'Cari tempat...', 'places.mapsSearchError': 'Pencarian tempat gagal.', 'places.loadingDetails': 'Memuat detail tempat…', 'places.osmHint': 'Menggunakan pencarian OpenStreetMap (tanpa foto, jam buka, atau penilaian). Tambahkan Google API key di pengaturan untuk detail lengkap.', 'places.osmActive': 'Pencarian via OpenStreetMap (tanpa foto, penilaian, atau jam buka). Tambahkan Google API key di Pengaturan untuk data yang lebih lengkap.', 'places.categoryCreateError': 'Gagal membuat kategori', 'places.nameRequired': 'Harap masukkan nama', 'places.saveError': 'Gagal menyimpan', // Place Inspector 'inspector.opened': 'Buka', 'inspector.closed': 'Tutup', 'inspector.openingHours': 'Jam Buka', 'inspector.showHours': 'Tampilkan jam buka', 'inspector.files': 'File', 'inspector.filesCount': '{count} file', 'inspector.remove': 'Hapus', 'inspector.removeFromDay': 'Hapus dari Hari', 'inspector.addToDay': 'Tambah ke Hari', 'inspector.confirmedRes': 'Reservasi Dikonfirmasi', 'inspector.pendingRes': 'Reservasi Menunggu', 'inspector.google': 'Buka di Google Maps', 'inspector.website': 'Buka Situs Web', 'inspector.addRes': 'Reservasi', 'inspector.editRes': 'Edit Reservasi', 'inspector.participants': 'Peserta', 'inspector.trackStats': 'Statistik Jalur', // Reservations 'reservations.title': 'Pemesanan', 'reservations.empty': 'Belum ada reservasi', 'reservations.emptyHint': 'Tambahkan reservasi untuk penerbangan, hotel, dan lainnya', 'reservations.add': 'Tambah Reservasi', 'reservations.addManual': 'Pemesanan Manual', 'reservations.placeHint': 'Tips: Reservasi paling baik dibuat langsung dari sebuah tempat agar terhubung dengan rencana harianmu.', 'reservations.confirmed': 'Dikonfirmasi', 'reservations.pending': 'Tertunda', 'reservations.summary': '{confirmed} dikonfirmasi, {pending} tertunda', 'reservations.fromPlan': 'Dari Rencana', 'reservations.showFiles': 'Tampilkan File', 'reservations.editTitle': 'Edit Reservasi', 'reservations.status': 'Status', 'reservations.datetime': 'Tanggal & Waktu', 'reservations.startTime': 'Waktu mulai', 'reservations.endTime': 'Waktu selesai', 'reservations.date': 'Tanggal', 'reservations.time': 'Waktu', 'reservations.timeAlt': 'Waktu (alternatif, mis. 19:30)', 'reservations.notes': 'Catatan', 'reservations.notesPlaceholder': 'Catatan tambahan...', 'reservations.meta.airline': 'Maskapai', 'reservations.meta.flightNumber': 'No. Penerbangan', 'reservations.meta.from': 'Dari', 'reservations.meta.to': 'Ke', 'reservations.meta.trainNumber': 'No. Kereta', 'reservations.meta.platform': 'Peron', 'reservations.meta.seat': 'Kursi', 'reservations.meta.checkIn': 'Check-in', 'reservations.meta.checkInUntil': 'Check-in sampai', 'reservations.meta.checkOut': 'Check-out', 'reservations.meta.linkAccommodation': 'Akomodasi', 'reservations.meta.pickAccommodation': 'Hubungkan ke akomodasi', 'reservations.meta.noAccommodation': 'Tidak ada', 'reservations.meta.hotelPlace': 'Akomodasi', 'reservations.meta.pickHotel': 'Pilih akomodasi', 'reservations.meta.fromDay': 'Dari', 'reservations.meta.toDay': 'Sampai', 'reservations.meta.selectDay': 'Pilih hari', 'reservations.type.flight': 'Penerbangan', 'reservations.type.hotel': 'Akomodasi', 'reservations.type.restaurant': 'Restoran', 'reservations.type.train': 'Kereta', 'reservations.type.car': 'Mobil Sewa', 'reservations.type.cruise': 'Kapal Pesiar', 'reservations.type.event': 'Acara', 'reservations.type.tour': 'Tur', 'reservations.type.other': 'Lainnya', 'reservations.confirm.delete': 'Yakin ingin menghapus reservasi "{name}"?', 'reservations.confirm.deleteTitle': 'Hapus pemesanan?', 'reservations.confirm.deleteBody': '"{name}" akan dihapus permanen.', 'reservations.toast.updated': 'Reservasi diperbarui', 'reservations.toast.removed': 'Reservasi dihapus', 'reservations.toast.fileUploaded': 'File diunggah', 'reservations.toast.uploadError': 'Gagal mengunggah', 'reservations.newTitle': 'Reservasi Baru', 'reservations.bookingType': 'Jenis Pemesanan', 'reservations.titleLabel': 'Judul', 'reservations.titlePlaceholder': 'mis. Lufthansa LH123, Hotel Adlon, ...', 'reservations.locationAddress': 'Lokasi / Alamat', 'reservations.locationPlaceholder': 'Alamat, Bandara, Hotel...', 'reservations.confirmationCode': 'Kode Pemesanan', 'reservations.confirmationPlaceholder': 'mis. ABC12345', 'reservations.day': 'Hari', 'reservations.noDay': 'Tanpa Hari', 'reservations.place': 'Tempat', 'reservations.noPlace': 'Tanpa Tempat', 'reservations.pendingSave': 'akan disimpan…', 'reservations.uploading': 'Mengunggah...', 'reservations.attachFile': 'Lampirkan file', 'reservations.linkExisting': 'Hubungkan file yang ada', 'reservations.toast.saveError': 'Gagal menyimpan', 'reservations.toast.updateError': 'Gagal memperbarui', 'reservations.toast.deleteError': 'Gagal menghapus', 'reservations.confirm.remove': 'Hapus reservasi untuk "{name}"?', 'reservations.linkAssignment': 'Hubungkan ke jadwal harian', 'reservations.pickAssignment': 'Pilih jadwal dari rencanamu...', 'reservations.noAssignment': 'Tanpa tautan (mandiri)', 'reservations.price': 'Harga', 'reservations.budgetCategory': 'Kategori anggaran', 'reservations.budgetCategoryPlaceholder': 'mis. Transportasi, Akomodasi', 'reservations.budgetCategoryAuto': 'Otomatis (dari jenis pemesanan)', 'reservations.budgetHint': 'Entri anggaran akan dibuat otomatis saat menyimpan.', 'reservations.departureDate': 'Keberangkatan', 'reservations.arrivalDate': 'Kedatangan', 'reservations.departureTime': 'Waktu berangkat', 'reservations.arrivalTime': 'Waktu tiba', 'reservations.pickupDate': 'Penjemputan', 'reservations.returnDate': 'Pengembalian', 'reservations.pickupTime': 'Waktu jemput', 'reservations.returnTime': 'Waktu kembali', 'reservations.endDate': 'Tanggal selesai', 'reservations.meta.departureTimezone': 'TZ Berangkat', 'reservations.meta.arrivalTimezone': 'TZ Tiba', 'reservations.span.departure': 'Keberangkatan', 'reservations.span.arrival': 'Kedatangan', 'reservations.span.inTransit': 'Dalam perjalanan', 'reservations.span.pickup': 'Penjemputan', 'reservations.span.return': 'Pengembalian', 'reservations.span.active': 'Aktif', 'reservations.span.start': 'Mulai', 'reservations.span.end': 'Selesai', 'reservations.span.ongoing': 'Berlangsung', 'reservations.validation.endBeforeStart': 'Tanggal/waktu selesai harus setelah tanggal/waktu mulai', // Budget 'budget.title': 'Anggaran', 'budget.exportCsv': 'Ekspor CSV', 'budget.emptyTitle': 'Belum ada anggaran', 'budget.emptyText': 'Buat kategori dan entri untuk merencanakan anggaran perjalananmu', 'budget.emptyPlaceholder': 'Masukkan nama kategori...', 'budget.createCategory': 'Buat Kategori', 'budget.category': 'Kategori', 'budget.categoryName': 'Nama Kategori', 'budget.table.name': 'Nama', 'budget.table.total': 'Total', 'budget.table.persons': 'Orang', 'budget.table.days': 'Hari', 'budget.table.perPerson': 'Per Orang', 'budget.table.perDay': 'Per Hari', 'budget.table.perPersonDay': 'P. o / Hari', 'budget.table.note': 'Catatan', 'budget.table.date': 'Tanggal', 'budget.newEntry': 'Entri Baru', 'budget.defaultEntry': 'Entri Baru', 'budget.defaultCategory': 'Kategori Baru', 'budget.total': 'Total', 'budget.totalBudget': 'Total Anggaran', 'budget.byCategory': 'Per Kategori', 'budget.editTooltip': 'Klik untuk edit', 'budget.linkedToReservation': 'Terhubung ke reservasi — edit nama di sana', 'budget.confirm.deleteCategory': 'Yakin ingin menghapus kategori "{name}" dengan {count} entri?', 'budget.deleteCategory': 'Hapus Kategori', 'budget.perPerson': 'Per Orang', 'budget.paid': 'Sudah dibayar', 'budget.open': 'Belum dibayar', 'budget.noMembers': 'Tidak ada anggota yang ditugaskan', 'budget.settlement': 'Penyelesaian', 'budget.settlementInfo': 'Klik foto anggota di item anggaran untuk menandainya hijau — artinya mereka sudah bayar. Penyelesaian lalu menunjukkan siapa berhutang ke siapa dan berapa.', 'budget.netBalances': 'Saldo Bersih', // Files 'files.title': 'File', 'files.pageTitle': 'File & Dokumen', 'files.subtitle': '{count} file untuk {trip}', 'files.downloadPdf': 'Unduh PDF', 'files.count': '{count} file', 'files.countSingular': '1 berkas', 'files.uploaded': '{count} diunggah', 'files.uploadError': 'Gagal mengunggah', 'files.dropzone': 'Jatuhkan file di sini', 'files.dropzoneHint': 'atau klik untuk memilih', 'files.allowedTypes': 'Gambar, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Maks 50 MB', 'files.uploading': 'Mengunggah...', 'files.filterAll': 'Semua', 'files.filterPdf': 'PDFs', 'files.filterImages': 'Gambar', 'files.filterDocs': 'Dokumen', 'files.filterCollab': 'Catatan Collab', 'files.sourceCollab': 'Dari Catatan Collab', 'files.empty': 'Belum ada file', 'files.emptyHint': 'Unggah file untuk melampirkannya ke perjalananmu', 'files.openTab': 'Buka di tab baru', 'files.confirm.delete': 'Yakin ingin menghapus file ini?', 'files.toast.deleted': 'File dihapus', 'files.toast.deleteError': 'Gagal menghapus file', 'files.sourcePlan': 'Rencana Harian', 'files.sourceBooking': 'Pemesanan', 'files.attach': 'Lampirkan', 'files.pasteHint': 'Kamu juga bisa menempel gambar dari clipboard (Ctrl+V)', 'files.trash': 'Sampah', 'files.trashEmpty': 'Sampah kosong', 'files.emptyTrash': 'Kosongkan Sampah', 'files.restore': 'Pulihkan', 'files.star': 'Bintang', 'files.unstar': 'Hapus bintang', 'files.assign': 'Tugaskan', 'files.assignTitle': 'Tugaskan File', 'files.assignPlace': 'Tempat', 'files.assignBooking': 'Pemesanan', 'files.unassigned': 'Tidak ditugaskan', 'files.unlink': 'Hapus tautan', 'files.toast.trashed': 'Dipindahkan ke sampah', 'files.toast.restored': 'File dipulihkan', 'files.toast.trashEmptied': 'Sampah dikosongkan', 'files.toast.assigned': 'File ditugaskan', 'files.toast.assignError': 'Penugasan gagal', 'files.toast.restoreError': 'Pemulihan gagal', 'files.confirm.permanentDelete': 'Hapus file ini secara permanen? Tindakan ini tidak bisa dibatalkan.', 'files.confirm.emptyTrash': 'Hapus semua file di sampah secara permanen? Tindakan ini tidak bisa dibatalkan.', 'files.noteLabel': 'Catatan', 'files.notePlaceholder': 'Tambahkan catatan...', // Packing 'packing.title': 'Daftar Bawaan', 'packing.empty': 'Daftar bawaan kosong', 'packing.import': 'Impor', 'packing.importTitle': 'Impor Daftar Bawaan', 'packing.importHint': 'Satu item per baris. Format: Kategori, Nama, Berat dalam g (opsional), Tas (opsional), checked/unchecked (opsional)', 'packing.importPlaceholder': 'Kebersihan, Sikat Gigi\nPakaian, Kaos, 200\nDokumen, Paspor, , Kabin\nElektronik, Charger, 50, Koper, checked', 'packing.importCsv': 'Muat CSV/TXT', 'packing.importAction': 'Impor {count}', 'packing.importSuccess': '{count} item berhasil diimpor', 'packing.importError': 'Impor gagal', 'packing.importEmpty': 'Tidak ada item untuk diimpor', 'packing.progress': '{packed} dari {total} sudah dikemas ({percent}%)', 'packing.clearChecked': 'Hapus {count} yang dicentang', 'packing.clearCheckedShort': 'Hapus {count}', 'packing.suggestions': 'Saran', 'packing.suggestionsTitle': 'Tambah Saran', 'packing.allSuggested': 'Semua saran sudah ditambahkan', 'packing.allPacked': 'Semua sudah dikemas!', 'packing.addPlaceholder': 'Tambah item baru...', 'packing.categoryPlaceholder': 'Kategori...', 'packing.filterAll': 'Semua', 'packing.filterOpen': 'Belum', 'packing.filterDone': 'Selesai', 'packing.emptyTitle': 'Daftar bawaan kosong', 'packing.emptyHint': 'Tambah item atau gunakan saran', 'packing.emptyFiltered': 'Tidak ada item yang cocok dengan filter ini', 'packing.menuRename': 'Ganti Nama', 'packing.menuCheckAll': 'Centang Semua', 'packing.menuUncheckAll': 'Hapus Centang Semua', 'packing.menuDeleteCat': 'Hapus Kategori', 'packing.noMembers': 'Tidak ada anggota perjalanan', 'packing.addItem': 'Tambah item', 'packing.addItemPlaceholder': 'Nama item...', 'packing.addCategory': 'Tambah kategori', 'packing.newCategoryPlaceholder': 'Nama kategori (contoh: Pakaian)', 'packing.applyTemplate': 'Terapkan template', 'packing.template': 'Template', 'packing.templateApplied': '{count} item ditambahkan dari template', 'packing.templateError': 'Gagal menerapkan template', 'packing.saveAsTemplate': 'Simpan sebagai template', 'packing.templateName': 'Nama template', 'packing.templateSaved': 'Daftar bawaan disimpan sebagai template', 'packing.bags': 'Tas', 'packing.noBag': 'Belum ditugaskan', 'packing.totalWeight': 'Total berat', 'packing.bagName': 'Nama tas...', 'packing.addBag': 'Tambah tas', 'packing.changeCategory': 'Ganti Kategori', 'packing.confirm.clearChecked': 'Yakin ingin menghapus {count} item yang dicentang?', 'packing.confirm.deleteCat': 'Yakin ingin menghapus kategori "{name}" beserta {count} item di dalamnya?', 'packing.defaultCategory': 'Lainnya', 'packing.toast.saveError': 'Gagal menyimpan', 'packing.toast.deleteError': 'Gagal menghapus', 'packing.toast.renameError': 'Gagal mengganti nama', 'packing.toast.addError': 'Gagal menambahkan', // Packing suggestions 'packing.suggestions.items': [ { name: 'Paspor', category: 'Dokumen' }, { name: 'KTP', category: 'Dokumen' }, { name: 'Asuransi Perjalanan', category: 'Dokumen' }, { name: 'Tiket Penerbangan', category: 'Dokumen' }, { name: 'Kartu Kredit', category: 'Keuangan' }, { name: 'Uang Tunai', category: 'Keuangan' }, { name: 'Visa', category: 'Dokumen' }, { name: 'Kaos', category: 'Pakaian' }, { name: 'Celana', category: 'Pakaian' }, { name: 'Pakaian Dalam', category: 'Pakaian' }, { name: 'Kaos Kaki', category: 'Pakaian' }, { name: 'Jaket', category: 'Pakaian' }, { name: 'Pakaian Tidur', category: 'Pakaian' }, { name: 'Pakaian Renang', category: 'Pakaian' }, { name: 'Jas Hujan', category: 'Pakaian' }, { name: 'Sepatu Nyaman', category: 'Pakaian' }, { name: 'Sikat Gigi', category: 'Perlengkapan Mandi' }, { name: 'Pasta Gigi', category: 'Perlengkapan Mandi' }, { name: 'Sampo', category: 'Perlengkapan Mandi' }, { name: 'Deodoran', category: 'Perlengkapan Mandi' }, { name: 'Tabir Surya', category: 'Perlengkapan Mandi' }, { name: 'Pisau Cukur', category: 'Perlengkapan Mandi' }, { name: 'Charger', category: 'Elektronik' }, { name: 'Power Bank', category: 'Elektronik' }, { name: 'Headphone', category: 'Elektronik' }, { name: 'Adaptor Perjalanan', category: 'Elektronik' }, { name: 'Kamera', category: 'Elektronik' }, { name: 'Obat Pereda Nyeri', category: 'Kesehatan' }, { name: 'Plester', category: 'Kesehatan' }, { name: 'Disinfektan', category: 'Kesehatan' }, ], // Members / Sharing 'members.shareTrip': 'Bagikan Perjalanan', 'members.inviteUser': 'Undang Pengguna', 'members.selectUser': 'Pilih pengguna…', 'members.invite': 'Undang', 'members.allHaveAccess': 'Semua pengguna sudah punya akses.', 'members.access': 'Akses', 'members.person': 'orang', 'members.persons': 'orang', 'members.you': 'kamu', 'members.owner': 'Pemilik', 'members.leaveTrip': 'Keluar dari perjalanan', 'members.removeAccess': 'Hapus akses', 'members.confirmLeave': 'Keluar dari perjalanan? Kamu akan kehilangan akses.', 'members.confirmRemove': 'Hapus akses untuk pengguna ini?', 'members.loadError': 'Gagal memuat anggota', 'members.added': 'ditambahkan', 'members.addError': 'Gagal menambahkan', 'members.removed': 'Anggota dihapus', 'members.removeError': 'Gagal menghapus', // Categories (Admin) 'categories.title': 'Kategori', 'categories.subtitle': 'Kelola kategori untuk tempat', 'categories.new': 'Kategori Baru', 'categories.empty': 'Belum ada kategori', 'categories.namePlaceholder': 'Nama kategori', 'categories.icon': 'Ikon', 'categories.color': 'Warna', 'categories.customColor': 'Pilih warna kustom', 'categories.preview': 'Pratinjau', 'categories.defaultName': 'Kategori', 'categories.update': 'Perbarui', 'categories.create': 'Buat', 'categories.confirm.delete': 'Hapus kategori? Tempat dalam kategori ini tidak akan dihapus.', 'categories.toast.loadError': 'Gagal memuat kategori', 'categories.toast.nameRequired': 'Harap masukkan nama', 'categories.toast.updated': 'Kategori diperbarui', 'categories.toast.created': 'Kategori dibuat', 'categories.toast.saveError': 'Gagal menyimpan', 'categories.toast.deleted': 'Kategori dihapus', 'categories.toast.deleteError': 'Gagal menghapus', // Backup (Admin) 'backup.title': 'Pencadangan Data', 'backup.subtitle': 'Database dan semua file yang diunggah', 'backup.refresh': 'Segarkan', 'backup.upload': 'Unggah Cadangan', 'backup.uploading': 'Mengunggah…', 'backup.create': 'Buat Cadangan', 'backup.creating': 'Membuat…', 'backup.empty': 'Belum ada cadangan', 'backup.createFirst': 'Buat cadangan pertama', 'backup.download': 'Unduh', 'backup.restore': 'Pulihkan', 'backup.confirm.restore': 'Pulihkan cadangan "{name}"?\n\nSemua data saat ini akan digantikan dengan cadangan.', 'backup.confirm.uploadRestore': 'Unggah dan pulihkan file cadangan "{name}"?\n\nSemua data saat ini akan ditimpa.', 'backup.confirm.delete': 'Hapus cadangan "{name}"?', 'backup.toast.loadError': 'Gagal memuat cadangan', 'backup.toast.created': 'Cadangan berhasil dibuat', 'backup.toast.createError': 'Gagal membuat cadangan', 'backup.toast.restored': 'Cadangan dipulihkan. Halaman akan dimuat ulang…', 'backup.toast.restoreError': 'Gagal memulihkan', 'backup.toast.uploadError': 'Gagal mengunggah', 'backup.toast.deleted': 'Cadangan dihapus', 'backup.toast.deleteError': 'Gagal menghapus', 'backup.toast.downloadError': 'Unduhan gagal', 'backup.toast.settingsSaved': 'Pengaturan pencadangan otomatis disimpan', 'backup.toast.settingsError': 'Gagal menyimpan pengaturan', 'backup.auto.title': 'Cadangan Otomatis', 'backup.auto.subtitle': 'Pencadangan otomatis sesuai jadwal', 'backup.auto.enable': 'Aktifkan cadangan otomatis', 'backup.auto.enableHint': 'Cadangan akan dibuat secara otomatis sesuai jadwal yang dipilih', 'backup.auto.interval': 'Interval', 'backup.auto.hour': 'Jalankan pada jam', 'backup.auto.hourHint': 'Waktu lokal server (format {format})', 'backup.auto.dayOfWeek': 'Hari dalam seminggu', 'backup.auto.dayOfMonth': 'Tanggal dalam sebulan', 'backup.auto.dayOfMonthHint': 'Dibatasi 1–28 agar kompatibel dengan semua bulan', 'backup.auto.scheduleSummary': 'Jadwal', 'backup.auto.summaryDaily': 'Setiap hari pukul {hour}:00', 'backup.auto.summaryWeekly': 'Setiap {day} pukul {hour}:00', 'backup.auto.summaryMonthly': 'Tanggal {day} setiap bulan pukul {hour}:00', 'backup.auto.envLocked': 'Docker', 'backup.auto.envLockedHint': 'Cadangan otomatis dikonfigurasi melalui variabel lingkungan Docker. Untuk mengubah pengaturan ini, perbarui docker-compose.yml kamu dan restart container.', 'backup.auto.copyEnv': 'Salin variabel env Docker', 'backup.auto.envCopied': 'Variabel env Docker disalin ke clipboard', 'backup.auto.keepLabel': 'Hapus cadangan lama setelah', 'backup.dow.sunday': 'Min', 'backup.dow.monday': 'Sen', 'backup.dow.tuesday': 'Sel', 'backup.dow.wednesday': 'Rab', 'backup.dow.thursday': 'Kam', 'backup.dow.friday': 'Jum', 'backup.dow.saturday': 'Sab', 'backup.interval.hourly': 'Per jam', 'backup.interval.daily': 'Harian', 'backup.interval.weekly': 'Mingguan', 'backup.interval.monthly': 'Bulanan', 'backup.keep.1day': '1 hari', 'backup.keep.3days': '3 hari', 'backup.keep.7days': '7 hari', 'backup.keep.14days': '14 hari', 'backup.keep.30days': '30 hari', 'backup.keep.forever': 'Simpan selamanya', // Photos 'photos.title': 'Foto', 'photos.subtitle': '{count} foto untuk {trip}', 'photos.dropHere': 'Lepas foto di sini...', 'photos.dropHereActive': 'Lepas foto di sini', 'photos.captionForAll': 'Keterangan (untuk semua)', 'photos.captionPlaceholder': 'Keterangan opsional...', 'photos.addCaption': 'Tambah keterangan...', 'photos.allDays': 'Semua Hari', 'photos.noPhotos': 'Belum ada foto', 'photos.uploadHint': 'Unggah foto perjalananmu', 'photos.clickToSelect': 'atau klik untuk memilih', 'photos.linkPlace': 'Tautkan Tempat', 'photos.noPlace': 'Tanpa Tempat', 'photos.uploadN': 'Unggah {n} foto', 'photos.linkDay': 'Tautkan Hari', 'photos.noDay': 'Tanpa Hari', 'photos.dayLabel': 'Hari {number}', 'photos.photoSelected': 'Foto dipilih', 'photos.photosSelected': 'Foto dipilih', 'photos.fileTypeHint': 'JPG, PNG, WebP · maks. 10 MB · hingga 30 foto', // Backup restore modal 'backup.restoreConfirmTitle': 'Pulihkan Cadangan?', 'backup.restoreWarning': 'Semua data saat ini (perjalanan, tempat, pengguna, unggahan) akan digantikan secara permanen oleh cadangan ini. Tindakan ini tidak dapat dibatalkan.', 'backup.restoreTip': 'Tips: Buat cadangan kondisi saat ini sebelum memulihkan.', 'backup.restoreConfirm': 'Ya, pulihkan', // PDF 'pdf.travelPlan': 'Rencana Perjalanan', 'pdf.planned': 'Direncanakan', 'pdf.costLabel': 'Biaya EUR', 'pdf.preview': 'Pratinjau PDF', 'pdf.saveAsPdf': 'Simpan sebagai PDF', // Planner 'planner.places': 'Tempat', 'planner.bookings': 'Pemesanan', 'planner.packingList': 'Daftar Bawaan', 'planner.documents': 'Dokumen', 'planner.dayPlan': 'Rencana Hari', 'planner.reservations': 'Reservasi', 'planner.minTwoPlaces': 'Dibutuhkan minimal 2 tempat dengan koordinat', 'planner.noGeoPlaces': 'Tidak ada tempat dengan koordinat yang tersedia', 'planner.routeCalculated': 'Rute berhasil dihitung', 'planner.routeCalcFailed': 'Rute tidak dapat dihitung', 'planner.routeError': 'Terjadi kesalahan saat menghitung rute', 'planner.icsExportFailed': 'Ekspor ICS gagal', 'planner.routeOptimized': 'Rute dioptimalkan', 'planner.reservationUpdated': 'Reservasi diperbarui', 'planner.reservationAdded': 'Reservasi ditambahkan', 'planner.confirmDeleteReservation': 'Hapus reservasi?', 'planner.reservationDeleted': 'Reservasi dihapus', 'planner.days': 'Hari', 'planner.allPlaces': 'Semua Tempat', 'planner.totalPlaces': '{n} tempat total', 'planner.noDaysPlanned': 'Belum ada hari yang direncanakan', 'planner.editTrip': 'Edit perjalanan \u2192', 'planner.placeOne': '1 tempat', 'planner.placeN': '{n} tempat', 'planner.addNote': 'Tambah catatan', 'planner.noEntries': 'Tidak ada entri untuk hari ini', 'planner.addPlace': 'Tambah tempat/aktivitas', 'planner.addPlaceShort': '+ Tambah tempat/aktivitas', 'planner.resPending': 'Reservasi tertunda · ', 'planner.resConfirmed': 'Reservasi dikonfirmasi · ', 'planner.notePlaceholder': 'Catatan\u2026', 'planner.noteTimePlaceholder': 'Waktu (opsional)', 'planner.noteExamplePlaceholder': 'mis. S3 pukul 14:30 dari stasiun pusat, feri dari dermaga 7, istirahat makan siang\u2026', 'planner.totalCost': 'Total biaya', 'planner.searchPlaces': 'Cari tempat\u2026', 'planner.allCategories': 'Semua Kategori', 'planner.noPlacesFound': 'Tempat tidak ditemukan', 'planner.addFirstPlace': 'Tambah tempat pertama', 'planner.noReservations': 'Tidak ada reservasi', 'planner.addFirstReservation': 'Tambah reservasi pertama', 'planner.new': 'Baru', 'planner.addToDay': '+ Hari', 'planner.calculating': 'Menghitung\u2026', 'planner.route': 'Rute', 'planner.optimize': 'Optimalkan', 'planner.openGoogleMaps': 'Buka di Google Maps', 'planner.selectDayHint': 'Pilih hari dari daftar kiri untuk melihat rencana hari', 'planner.noPlacesForDay': 'Belum ada tempat untuk hari ini', 'planner.addPlacesLink': 'Tambah tempat \u2192', 'planner.minTotal': 'total min.', 'planner.noReservation': 'Tidak ada reservasi', 'planner.removeFromDay': 'Hapus dari hari', 'planner.addToThisDay': 'Tambah ke hari ini', 'planner.overview': 'Ikhtisar', 'planner.noDays': 'Belum ada hari', 'planner.editTripToAddDays': 'Edit perjalanan untuk menambah hari', 'planner.dayCount': '{n} Hari', 'planner.clickToUnlock': 'Klik untuk membuka kunci', 'planner.keepPosition': 'Pertahankan posisi saat mengoptimalkan rute', 'planner.dayDetails': 'Detail hari', 'planner.dayN': 'Hari {n}', // Dashboard Stats 'stats.countries': 'Negara', 'stats.cities': 'Kota', 'stats.trips': 'Perjalanan', 'stats.places': 'Tempat', 'stats.worldProgress': 'Progres Dunia', 'stats.visited': 'dikunjungi', 'stats.remaining': 'tersisa', 'stats.visitedCountries': 'Negara yang Dikunjungi', // Day Detail Panel 'day.precipProb': 'Peluang hujan', 'day.precipitation': 'Curah hujan', 'day.wind': 'Angin', 'day.sunrise': 'Matahari terbit', 'day.sunset': 'Matahari terbenam', 'day.hourlyForecast': 'Prakiraan Per Jam', 'day.climateHint': 'Rata-rata historis — prakiraan nyata tersedia dalam 16 hari dari tanggal ini.', 'day.noWeather': 'Data cuaca tidak tersedia. Tambahkan tempat dengan koordinat.', 'day.overview': 'Ikhtisar Harian', 'day.accommodation': 'Akomodasi', 'day.addAccommodation': 'Tambah akomodasi', 'day.hotelDayRange': 'Terapkan ke hari', 'day.noPlacesForHotel': 'Tambahkan tempat ke perjalananmu terlebih dahulu', 'day.allDays': 'Semua', 'day.checkIn': 'Check-in', 'day.checkInUntil': 'Sampai', 'day.checkOut': 'Check-out', 'day.confirmation': 'Konfirmasi', 'day.editAccommodation': 'Edit akomodasi', 'day.reservations': 'Reservasi', // Photos / Immich 'memories.title': 'Foto', 'memories.notConnected': '{provider_name} belum terhubung', 'memories.notConnectedHint': 'Hubungkan instans {provider_name} kamu di Pengaturan untuk dapat menambahkan foto ke perjalanan ini.', 'memories.notConnectedMultipleHint': 'Hubungkan salah satu penyedia foto berikut: {provider_names} di Pengaturan untuk dapat menambahkan foto ke perjalanan ini.', 'memories.noDates': 'Tambahkan tanggal ke perjalananmu untuk memuat foto.', 'memories.noPhotos': 'Foto tidak ditemukan', 'memories.noPhotosHint': 'Tidak ada foto ditemukan di {provider_name} untuk rentang tanggal perjalanan ini.', 'memories.photosFound': 'foto', 'memories.fromOthers': 'dari orang lain', 'memories.sharePhotos': 'Bagikan foto', 'memories.sharing': 'Berbagi', 'memories.reviewTitle': 'Tinjau foto kamu', 'memories.reviewHint': 'Klik foto untuk mengecualikannya dari berbagi.', 'memories.shareCount': 'Bagikan {count} foto', //------------------------- //todo section 'memories.providerUrl': 'URL Server', 'memories.providerApiKey': 'API Key', 'memories.providerUsername': 'Nama pengguna', 'memories.providerPassword': 'Kata sandi', 'memories.providerOTP': 'Kode MFA (jika diaktifkan)', 'memories.skipSSLVerification': 'Lewati verifikasi sertifikat SSL', 'memories.providerUrlHintSynology': 'Sertakan path aplikasi Photos di URL, mis. https://nas:5001/photo', 'memories.testConnection': 'Uji koneksi', 'memories.testFirst': 'Uji koneksi terlebih dahulu', 'memories.connected': 'Terhubung', 'memories.disconnected': 'Tidak terhubung', 'memories.connectionSuccess': 'Terhubung ke {provider_name}', 'memories.connectionError': 'Tidak dapat terhubung ke {provider_name}', 'memories.saved': 'Pengaturan {provider_name} disimpan', 'memories.providerDisconnectedBanner': 'Koneksi {provider_name} kamu terputus. Hubungkan ulang di Pengaturan untuk melihat foto.', 'memories.saveError': 'Tidak dapat menyimpan pengaturan {provider_name}', //------------------------ 'memories.addPhotos': 'Tambah foto', 'memories.linkAlbum': 'Tautkan Album', 'memories.selectAlbum': 'Pilih Album {provider_name}', 'memories.selectAlbumMultiple': 'Pilih Album', 'memories.noAlbums': 'Tidak ada album ditemukan', 'memories.syncAlbum': 'Sinkronkan album', 'memories.unlinkAlbum': 'Putuskan tautan album', 'memories.photos': 'foto', 'memories.selectPhotos': 'Pilih foto dari {provider_name}', 'memories.selectPhotosMultiple': 'Pilih Foto', 'memories.selectHint': 'Ketuk foto untuk memilihnya.', 'memories.selected': 'dipilih', 'memories.addSelected': 'Tambah {count} foto', 'memories.alreadyAdded': 'Sudah ditambahkan', 'memories.private': 'Privat', 'memories.stopSharing': 'Berhenti berbagi', 'memories.oldest': 'Terlama dulu', 'memories.newest': 'Terbaru dulu', 'memories.allLocations': 'Semua lokasi', 'memories.tripDates': 'Tanggal perjalanan', 'memories.allPhotos': 'Semua foto', 'memories.confirmShareTitle': 'Bagikan ke anggota perjalanan?', 'memories.confirmShareHint': '{count} foto akan terlihat oleh semua anggota perjalanan ini. Kamu bisa membuat foto tertentu menjadi privat nanti.', 'memories.confirmShareButton': 'Bagikan foto', 'memories.error.loadAlbums': 'Gagal memuat album', 'memories.error.linkAlbum': 'Gagal menautkan album', 'memories.error.unlinkAlbum': 'Gagal memutuskan tautan album', 'memories.error.syncAlbum': 'Gagal menyinkronkan album', 'memories.error.loadPhotos': 'Gagal memuat foto', 'memories.error.addPhotos': 'Gagal menambahkan foto', 'memories.error.removePhoto': 'Gagal menghapus foto', 'memories.error.toggleSharing': 'Gagal memperbarui berbagi', 'memories.saveRouteNotConfigured': 'Rute simpan tidak dikonfigurasi untuk penyedia ini', 'memories.testRouteNotConfigured': 'Rute uji tidak dikonfigurasi untuk penyedia ini', 'memories.fillRequiredFields': 'Harap isi semua kolom yang wajib diisi', // Collab Addon 'collab.tabs.chat': 'Chat', 'collab.tabs.notes': 'Catatan', 'collab.tabs.polls': 'Polling', 'collab.whatsNext.title': 'Berikutnya', 'collab.whatsNext.today': 'Hari ini', 'collab.whatsNext.tomorrow': 'Besok', 'collab.whatsNext.empty': 'Tidak ada aktivitas mendatang', 'collab.whatsNext.until': 'sampai', 'collab.whatsNext.emptyHint': 'Aktivitas dengan waktu akan muncul di sini', 'collab.chat.send': 'Kirim', 'collab.chat.placeholder': 'Ketik pesan...', 'collab.chat.empty': 'Mulai percakapan', 'collab.chat.emptyHint': 'Pesan dibagikan kepada semua anggota perjalanan', 'collab.chat.emptyDesc': 'Bagikan ide, rencana, dan update dengan grup perjalananmu', 'collab.chat.today': 'Hari ini', 'collab.chat.yesterday': 'Kemarin', 'collab.chat.deletedMessage': 'menghapus pesan', 'collab.chat.reply': 'Balas', 'collab.chat.loadMore': 'Muat pesan lebih lama', 'collab.chat.justNow': 'baru saja', 'collab.chat.minutesAgo': '{n}m lalu', 'collab.chat.hoursAgo': '{n}j lalu', 'collab.notes.title': 'Catatan', 'collab.notes.new': 'Catatan Baru', 'collab.notes.empty': 'Belum ada catatan', 'collab.notes.emptyHint': 'Mulai catat ide dan rencana', 'collab.notes.all': 'Semua', 'collab.notes.titlePlaceholder': 'Judul catatan', 'collab.notes.contentPlaceholder': 'Tulis sesuatu...', 'collab.notes.categoryPlaceholder': 'Kategori', 'collab.notes.newCategory': 'Kategori baru...', 'collab.notes.category': 'Kategori', 'collab.notes.noCategory': 'Tanpa kategori', 'collab.notes.color': 'Warna', 'collab.notes.save': 'Simpan', 'collab.notes.cancel': 'Batal', 'collab.notes.edit': 'Edit', 'collab.notes.delete': 'Hapus', 'collab.notes.pin': 'Sematkan', 'collab.notes.unpin': 'Lepas sematan', 'collab.notes.daysAgo': '{n}h lalu', 'collab.notes.categorySettings': 'Kelola Kategori', 'collab.notes.create': 'Buat', 'collab.notes.website': 'Website', 'collab.notes.websitePlaceholder': 'https://...', 'collab.notes.attachFiles': 'Lampirkan file', 'collab.notes.noCategoriesYet': 'Belum ada kategori', 'collab.notes.emptyDesc': 'Buat catatan untuk memulai', 'collab.polls.title': 'Polling', 'collab.polls.new': 'Polling Baru', 'collab.polls.empty': 'Belum ada polling', 'collab.polls.emptyHint': 'Tanyakan ke grup dan voting bersama', 'collab.polls.question': 'Pertanyaan', 'collab.polls.questionPlaceholder': 'Apa yang harus kita lakukan?', 'collab.polls.addOption': '+ Tambah pilihan', 'collab.polls.optionPlaceholder': 'Pilihan {n}', 'collab.polls.create': 'Buat Polling', 'collab.polls.close': 'Tutup', 'collab.polls.closed': 'Ditutup', 'collab.polls.votes': '{n} suara', 'collab.polls.vote': '{n} suara', 'collab.polls.multipleChoice': 'Pilihan ganda', 'collab.polls.multiChoice': 'Pilihan ganda', 'collab.polls.deadline': 'Tenggat waktu', 'collab.polls.option': 'Pilihan', 'collab.polls.options': 'Pilihan', 'collab.polls.delete': 'Hapus', 'collab.polls.closedSection': 'Ditutup', // Permissions 'admin.tabs.permissions': 'Izin', 'perm.title': 'Pengaturan Izin', 'perm.subtitle': 'Kendalikan siapa yang bisa melakukan tindakan di aplikasi', 'perm.saved': 'Pengaturan izin disimpan', 'perm.resetDefaults': 'Kembalikan ke default', 'perm.customized': 'dikustomisasi', 'perm.level.admin': 'Hanya Admin', 'perm.level.tripOwner': 'Pemilik perjalanan', 'perm.level.tripMember': 'Anggota perjalanan', 'perm.level.everybody': 'Semua orang', 'perm.cat.trip': 'Manajemen Perjalanan', 'perm.cat.members': 'Manajemen Anggota', 'perm.cat.files': 'File', 'perm.cat.content': 'Konten & Jadwal', 'perm.cat.extras': 'Anggaran, Perlengkapan & Kolaborasi', 'perm.action.trip_create': 'Buat perjalanan', 'perm.action.trip_edit': 'Edit detail perjalanan', 'perm.action.trip_delete': 'Hapus perjalanan', 'perm.action.trip_archive': 'Arsipkan / batalkan arsip perjalanan', 'perm.action.trip_cover_upload': 'Unggah gambar sampul', 'perm.action.member_manage': 'Tambah / hapus anggota', 'perm.action.file_upload': 'Unggah file', 'perm.action.file_edit': 'Edit metadata file', 'perm.action.file_delete': 'Hapus file', 'perm.action.place_edit': 'Tambah / edit / hapus tempat', 'perm.action.day_edit': 'Edit hari, catatan & penugasan', 'perm.action.reservation_edit': 'Kelola reservasi', 'perm.action.budget_edit': 'Kelola anggaran', 'perm.action.packing_edit': 'Kelola daftar perlengkapan', 'perm.action.collab_edit': 'Kolaborasi (catatan, polling, chat)', 'perm.action.share_manage': 'Kelola tautan berbagi', 'perm.actionHint.trip_create': 'Siapa yang bisa membuat perjalanan baru', 'perm.actionHint.trip_edit': 'Siapa yang bisa mengubah nama, tanggal, deskripsi, dan mata uang perjalanan', 'perm.actionHint.trip_delete': 'Siapa yang bisa menghapus perjalanan secara permanen', 'perm.actionHint.trip_archive': 'Siapa yang bisa mengarsipkan atau membatalkan arsip perjalanan', 'perm.actionHint.trip_cover_upload': 'Siapa yang bisa mengunggah atau mengganti gambar sampul', 'perm.actionHint.member_manage': 'Siapa yang bisa mengundang atau menghapus anggota perjalanan', 'perm.actionHint.file_upload': 'Siapa yang bisa mengunggah file ke perjalanan', 'perm.actionHint.file_edit': 'Siapa yang bisa mengedit deskripsi dan tautan file', 'perm.actionHint.file_delete': 'Siapa yang bisa memindahkan file ke sampah atau menghapusnya secara permanen', 'perm.actionHint.place_edit': 'Siapa yang bisa menambah, mengedit, atau menghapus tempat', 'perm.actionHint.day_edit': 'Siapa yang bisa mengedit hari, catatan hari, dan penugasan tempat', 'perm.actionHint.reservation_edit': 'Siapa yang bisa membuat, mengedit, atau menghapus reservasi', 'perm.actionHint.budget_edit': 'Siapa yang bisa membuat, mengedit, atau menghapus item anggaran', 'perm.actionHint.packing_edit': 'Siapa yang bisa mengelola item perlengkapan dan tas', 'perm.actionHint.collab_edit': 'Siapa yang bisa membuat catatan, polling, dan mengirim pesan', 'perm.actionHint.share_manage': 'Siapa yang bisa membuat atau menghapus tautan berbagi publik', // Undo 'undo.button': 'Batalkan', 'undo.tooltip': 'Batalkan: {action}', 'undo.assignPlace': 'Tempat ditambahkan ke hari', 'undo.removeAssignment': 'Tempat dihapus dari hari', 'undo.reorder': 'Tempat diurutkan ulang', 'undo.optimize': 'Rute dioptimalkan', 'undo.deletePlace': 'Tempat dihapus', 'undo.moveDay': 'Tempat dipindah ke hari lain', 'undo.lock': 'Kunci tempat diubah', 'undo.importGpx': 'Impor GPX', 'undo.importKeyholeMarkup': 'Impor KMZ/KML', 'undo.importGoogleList': 'Impor Google Maps', 'undo.importNaverList': 'Impor Naver Maps', 'undo.addPlace': 'Tempat ditambahkan', 'undo.done': 'Dibatalkan: {action}', // Notifications 'notifications.title': 'Notifikasi', 'notifications.markAllRead': 'Tandai semua dibaca', 'notifications.deleteAll': 'Hapus semua', 'notifications.showAll': 'Tampilkan semua notifikasi', 'notifications.empty': 'Tidak ada notifikasi', 'notifications.emptyDescription': 'Semuanya sudah terbaca!', 'notifications.all': 'Semua', 'notifications.unreadOnly': 'Belum dibaca', 'notifications.markRead': 'Tandai sudah dibaca', 'notifications.markUnread': 'Tandai belum dibaca', 'notifications.delete': 'Hapus', 'notifications.system': 'Sistem', 'notifications.synologySessionCleared.title': 'Synology Photos terputus', 'notifications.synologySessionCleared.text': 'Server atau akun kamu berubah — buka Pengaturan untuk menguji koneksi lagi.', // Notification test keys (dev only) 'notifications.versionAvailable.title': 'Pembaruan Tersedia', 'notifications.versionAvailable.text': 'TREK {version} kini tersedia.', 'notifications.versionAvailable.button': 'Lihat Detail', 'notifications.test.title': 'Notifikasi uji dari {actor}', 'notifications.test.text': 'Ini adalah notifikasi uji sederhana.', 'notifications.test.booleanTitle': '{actor} meminta persetujuanmu', 'notifications.test.booleanText': 'Ini adalah notifikasi uji boolean. Pilih tindakan di bawah.', 'notifications.test.accept': 'Setujui', 'notifications.test.decline': 'Tolak', 'notifications.test.navigateTitle': 'Cek sesuatu', 'notifications.test.navigateText': 'Ini adalah notifikasi uji navigasi.', 'notifications.test.goThere': 'Ke sana', 'notifications.test.adminTitle': 'Siaran Admin', 'notifications.test.adminText': '{actor} mengirim notifikasi uji ke semua admin.', 'notifications.test.tripTitle': '{actor} memposting di perjalananmu', 'notifications.test.tripText': 'Notifikasi uji untuk perjalanan "{trip}".', // Todo 'todo.subtab.packing': 'Daftar Perlengkapan', 'todo.subtab.todo': 'Tugas', 'todo.completed': 'selesai', 'todo.filter.all': 'Semua', 'todo.filter.open': 'Terbuka', 'todo.filter.done': 'Selesai', 'todo.uncategorized': 'Tanpa kategori', 'todo.namePlaceholder': 'Nama tugas', 'todo.descriptionPlaceholder': 'Deskripsi (opsional)', 'todo.unassigned': 'Belum ditugaskan', 'todo.noCategory': 'Tanpa kategori', 'todo.hasDescription': 'Ada deskripsi', 'todo.addItem': 'Tambah tugas baru...', 'todo.newCategory': 'Nama kategori', 'todo.addCategory': 'Tambah kategori', 'todo.newItem': 'Tugas baru', 'todo.empty': 'Belum ada tugas. Tambah tugas untuk memulai!', 'todo.filter.my': 'Tugasku', 'todo.filter.overdue': 'Terlambat', 'todo.sidebar.tasks': 'Tugas', 'todo.sidebar.categories': 'Kategori', 'todo.detail.title': 'Tugas', 'todo.detail.description': 'Deskripsi', 'todo.detail.category': 'Kategori', 'todo.detail.dueDate': 'Tenggat waktu', 'todo.detail.assignedTo': 'Ditugaskan ke', 'todo.detail.delete': 'Hapus', 'todo.detail.save': 'Simpan perubahan', 'todo.sortByPrio': 'Prioritas', 'todo.detail.priority': 'Prioritas', 'todo.detail.noPriority': 'Tidak ada', 'todo.detail.create': 'Buat tugas', // Notifications — dev test events 'notif.test.title': '[Test] Notifikasi', 'notif.test.simple.text': 'Ini adalah notifikasi uji sederhana.', 'notif.test.boolean.text': 'Apakah kamu menerima notifikasi uji ini?', 'notif.test.navigate.text': 'Klik di bawah untuk pergi ke dasbor.', // Notifications 'notif.trip_invite.title': 'Undangan Perjalanan', 'notif.trip_invite.text': '{actor} mengundangmu ke {trip}', 'notif.booking_change.title': 'Pemesanan Diperbarui', 'notif.booking_change.text': '{actor} memperbarui pemesanan di {trip}', 'notif.trip_reminder.title': 'Pengingat Perjalanan', 'notif.trip_reminder.text': 'Perjalananmu {trip} akan segera dimulai!', 'notif.vacay_invite.title': 'Undangan Vacay Fusion', 'notif.vacay_invite.text': '{actor} mengundangmu untuk menggabungkan rencana liburan', 'notif.photos_shared.title': 'Foto Dibagikan', 'notif.photos_shared.text': '{actor} membagikan {count} foto di {trip}', 'notif.collab_message.title': 'Pesan Baru', 'notif.collab_message.text': '{actor} mengirim pesan di {trip}', 'notif.packing_tagged.title': 'Penugasan Perlengkapan', 'notif.packing_tagged.text': '{actor} menugaskanmu ke {category} di {trip}', 'notif.version_available.title': 'Versi Baru Tersedia', 'notif.version_available.text': 'TREK {version} kini tersedia', 'notif.action.view_trip': 'Lihat Perjalanan', 'notif.action.view_collab': 'Lihat Pesan', 'notif.action.view_packing': 'Lihat Perlengkapan', 'notif.action.view_photos': 'Lihat Foto', 'notif.action.view_vacay': 'Lihat Vacay', 'notif.action.view_admin': 'Ke Admin', 'notif.action.view': 'Lihat', 'notif.action.accept': 'Terima', 'notif.action.decline': 'Tolak', 'notif.generic.title': 'Notifikasi', 'notif.generic.text': 'Kamu punya notifikasi baru', 'notif.dev.unknown_event.title': '[DEV] Event Tidak Dikenal', 'notif.dev.unknown_event.text': 'Tipe event "{event}" tidak terdaftar di EVENT_NOTIFICATION_CONFIG', // Journey addon 'journey.title': 'Journey', 'journey.subtitle': 'Lacak perjalananmu saat terjadi', 'journey.new': 'Journey Baru', 'journey.create': 'Buat', 'journey.titlePlaceholder': 'Ke mana kamu pergi?', 'journey.empty': 'Belum ada journey', 'journey.emptyHint': 'Mulai mendokumentasikan perjalananmu berikutnya', 'journey.deleted': 'Journey dihapus', 'journey.createError': 'Tidak dapat membuat journey', 'journey.deleteError': 'Tidak dapat menghapus journey', 'journey.deleteConfirmTitle': 'Hapus', 'journey.deleteConfirmMessage': 'Hapus "{title}"? Tindakan ini tidak dapat dibatalkan.', 'journey.deleteConfirmGeneric': 'Apakah kamu yakin ingin menghapus ini?', 'journey.notFound': 'Journey tidak ditemukan', 'journey.photos': 'Foto', 'journey.timelineEmpty': 'Belum ada persinggahan', 'journey.timelineEmptyHint': 'Tambahkan check-in atau tulis entri jurnal untuk memulai', 'journey.status.draft': 'Draf', 'journey.status.active': 'Aktif', 'journey.status.completed': 'Selesai', 'journey.status.upcoming': 'Mendatang', 'journey.checkin.add': 'Check in', 'journey.checkin.namePlaceholder': 'Nama lokasi', 'journey.checkin.notesPlaceholder': 'Catatan (opsional)', 'journey.checkin.save': 'Simpan', 'journey.checkin.error': 'Tidak dapat menyimpan check-in', 'journey.entry.add': 'Jurnal', 'journey.entry.edit': 'Edit entri', 'journey.entry.titlePlaceholder': 'Judul (opsional)', 'journey.entry.bodyPlaceholder': 'Apa yang terjadi hari ini?', 'journey.entry.save': 'Simpan', 'journey.entry.error': 'Tidak dapat menyimpan entri', 'journey.photo.add': 'Foto', 'journey.photo.uploadError': 'Unggah gagal', 'journey.share.share': 'Bagikan', 'journey.share.public': 'Publik', 'journey.share.linkCopied': 'Tautan publik disalin', 'journey.share.disabled': 'Berbagi publik dinonaktifkan', 'journey.editor.titlePlaceholder': 'Beri nama momen ini...', 'journey.editor.bodyPlaceholder': 'Ceritakan kisah hari ini...', 'journey.editor.placePlaceholder': 'Lokasi (opsional)', 'journey.editor.tagsPlaceholder': 'Tag: permata tersembunyi, makan terbaik, wajib dikunjungi lagi...', 'journey.visibility.private': 'Pribadi', 'journey.visibility.shared': 'Dibagikan', 'journey.visibility.public': 'Publik', 'journey.emptyState.title': 'Kisahmu dimulai di sini', 'journey.emptyState.subtitle': 'Check in di suatu tempat atau tulis entri jurnal pertamamu', // Journey Frontpage 'journey.frontpage.subtitle': 'Ubah perjalananmu menjadi kisah yang tak terlupakan', 'journey.frontpage.createJourney': 'Buat Journey', 'journey.frontpage.activeJourney': 'Journey Aktif', 'journey.frontpage.allJourneys': 'Semua Journey', 'journey.frontpage.journeys': 'journey', 'journey.frontpage.createNew': 'Buat Journey baru', 'journey.frontpage.createNewSub': 'Pilih perjalanan, tulis cerita, bagikan petualanganmu', 'journey.frontpage.live': 'Langsung', 'journey.frontpage.synced': 'Tersinkron', 'journey.frontpage.continueWriting': 'Lanjutkan menulis', 'journey.frontpage.updated': 'Diperbarui {time}', 'journey.frontpage.suggestionLabel': 'Perjalanan baru saja selesai', 'journey.frontpage.suggestionText': 'Ubah {title} menjadi Journey', 'journey.frontpage.dismiss': 'Tutup', 'journey.frontpage.journeyName': 'Nama Journey', 'journey.frontpage.namePlaceholder': 'mis. Asia Tenggara 2026', 'journey.frontpage.selectTrips': 'Pilih Perjalanan', 'journey.frontpage.tripsSelected': 'perjalanan dipilih', 'journey.frontpage.trips': 'perjalanan', 'journey.frontpage.placesImported': 'tempat akan diimpor', 'journey.frontpage.places': 'tempat', // Journey Detail 'journey.detail.backToJourney': 'Kembali ke Journey', 'journey.detail.syncedWithTrips': 'Tersinkron dengan Perjalanan', 'journey.detail.addEntry': 'Tambah Entri', 'journey.detail.newEntry': 'Entri Baru', 'journey.detail.editEntry': 'Edit Entri', 'journey.detail.noEntries': 'Belum ada entri', 'journey.detail.noEntriesHint': 'Tambahkan perjalanan untuk mulai dengan entri kerangka', 'journey.detail.noPhotos': 'Belum ada foto', 'journey.detail.noPhotosHint': 'Unggah foto ke entri atau jelajahi galeri Immich/Synology-mu', 'journey.detail.journeyStats': 'Statistik Journey', 'journey.detail.syncedTrips': 'Perjalanan Tersinkron', 'journey.detail.noTripsLinked': 'Belum ada perjalanan yang ditautkan', 'journey.detail.contributors': 'Kontributor', 'journey.detail.readMore': 'Baca selengkapnya', 'journey.detail.prosCons': 'Pro & Kontra', 'journey.detail.photos': 'foto', 'journey.detail.day': 'Hari {number}', 'journey.detail.places': 'tempat', // Journey Detail — Stats 'journey.stats.days': 'Hari', 'journey.stats.cities': 'Kota', 'journey.stats.entries': 'Entri', 'journey.stats.photos': 'Foto', 'journey.stats.places': 'Tempat', 'journey.skeletons.show': 'Tampilkan saran', 'journey.skeletons.hide': 'Sembunyikan saran', // Journey Detail — Verdict 'journey.verdict.lovedIt': 'Sangat suka', 'journey.verdict.couldBeBetter': 'Bisa lebih baik', // Journey Detail — Synced badge 'journey.synced.places': 'tempat', 'journey.synced.synced': 'tersinkron', // Journey Entry Editor 'journey.editor.uploadPhotos': 'Unggah foto', 'journey.editor.uploading': 'Mengunggah...', 'journey.editor.fromGallery': 'Dari Galeri', 'journey.editor.allPhotosAdded': 'Semua foto sudah ditambahkan', 'journey.editor.writeStory': 'Tulis kisahmu...', 'journey.editor.prosCons': 'Pro & Kontra', 'journey.editor.pros': 'Pro', 'journey.editor.cons': 'Kontra', 'journey.editor.proPlaceholder': 'Sesuatu yang bagus...', 'journey.editor.conPlaceholder': 'Tidak begitu bagus...', 'journey.editor.addAnother': 'Tambah lagi', 'journey.editor.date': 'Tanggal', 'journey.editor.location': 'Lokasi', 'journey.editor.searchLocation': 'Cari lokasi...', 'journey.editor.mood': 'Suasana Hati', 'journey.editor.weather': 'Cuaca', 'journey.editor.photoFirst': '1.', 'journey.editor.makeFirst': 'Jadikan ke-1', 'journey.editor.searching': 'Mencari...', // Journey Entry — Moods 'journey.mood.amazing': 'Luar biasa', 'journey.mood.good': 'Baik', 'journey.mood.neutral': 'Biasa', 'journey.mood.rough': 'Berat', // Journey Entry — Weather 'journey.weather.sunny': 'Cerah', 'journey.weather.partly': 'Berawan sebagian', 'journey.weather.cloudy': 'Mendung', 'journey.weather.rainy': 'Hujan', 'journey.weather.stormy': 'Badai', 'journey.weather.cold': 'Bersalju', // Journey — Trip Linking 'journey.trips.linkTrip': 'Tautkan Perjalanan', 'journey.trips.searchTrip': 'Cari Perjalanan', 'journey.trips.searchPlaceholder': 'Nama perjalanan atau tujuan...', 'journey.trips.noTripsAvailable': 'Tidak ada perjalanan tersedia', 'journey.trips.link': 'Tautkan', 'journey.trips.tripLinked': 'Perjalanan ditautkan', 'journey.trips.linkFailed': 'Gagal menautkan perjalanan', 'journey.trips.addTrip': 'Tambah Perjalanan', 'journey.trips.unlinkTrip': 'Lepas Tautan Perjalanan', 'journey.trips.unlinkMessage': 'Lepas tautan "{title}"? Semua entri dan foto yang tersinkron dari perjalanan ini akan dihapus permanen. Tindakan ini tidak dapat dibatalkan.', 'journey.trips.unlink': 'Lepas Tautan', 'journey.trips.tripUnlinked': 'Tautan perjalanan dilepas', 'journey.trips.unlinkFailed': 'Gagal melepas tautan perjalanan', 'journey.trips.noTripsLinkedSettings': 'Tidak ada perjalanan yang ditautkan', // Journey — Contributors 'journey.contributors.invite': 'Undang Kontributor', 'journey.contributors.searchUser': 'Cari Pengguna', 'journey.contributors.searchPlaceholder': 'Nama pengguna atau email...', 'journey.contributors.noUsers': 'Tidak ada pengguna ditemukan', 'journey.contributors.role': 'Peran', 'journey.contributors.added': 'Kontributor ditambahkan', 'journey.contributors.addFailed': 'Gagal menambahkan kontributor', // Journey — Share 'journey.share.publicShare': 'Berbagi Publik', 'journey.share.createLink': 'Buat tautan berbagi', 'journey.share.linkCreated': 'Tautan berbagi dibuat', 'journey.share.createFailed': 'Gagal membuat tautan', 'journey.share.copy': 'Salin', 'journey.share.copied': 'Disalin!', 'journey.share.timeline': 'Linimasa', 'journey.share.gallery': 'Galeri', 'journey.share.map': 'Peta', 'journey.share.removeLink': 'Hapus tautan berbagi', 'journey.share.linkDeleted': 'Tautan berbagi dihapus', 'journey.share.deleteFailed': 'Gagal menghapus', 'journey.share.updateFailed': 'Gagal memperbarui', // Journey — Invite 'journey.invite.role': 'Peran', 'journey.invite.viewer': 'Penonton', 'journey.invite.editor': 'Editor', 'journey.invite.invite': 'Undang', 'journey.invite.inviting': 'Mengundang...', // Journey — Settings Dialog 'journey.settings.title': 'Pengaturan Journey', 'journey.settings.coverImage': 'Gambar Sampul', 'journey.settings.changeCover': 'Ubah sampul', 'journey.settings.addCover': 'Tambah gambar sampul', 'journey.settings.name': 'Nama', 'journey.settings.subtitle': 'Subjudul', 'journey.settings.subtitlePlaceholder': 'mis. Thailand, Vietnam & Kamboja', 'journey.settings.delete': 'Hapus', 'journey.settings.deleteJourney': 'Hapus Journey', 'journey.settings.deleteMessage': 'Hapus "{title}"? Semua entri dan foto akan hilang.', 'journey.settings.saved': 'Pengaturan disimpan', 'journey.settings.saveFailed': 'Gagal menyimpan', 'journey.settings.coverUpdated': 'Sampul diperbarui', 'journey.settings.coverFailed': 'Unggah gagal', 'journey.settings.failedToDelete': 'Gagal menghapus', 'journey.entries.deleteTitle': 'Hapus Entri', 'journey.photosUploaded': '{count} foto diunggah', 'journey.photosAdded': '{count} foto ditambahkan', // Journey — Public Page 'journey.public.notFound': 'Tidak Ditemukan', 'journey.public.notFoundMessage': 'Journey ini tidak ada atau tautan telah kedaluwarsa.', 'journey.public.readOnly': 'Hanya baca · Journey Publik', 'journey.public.tagline': 'Travel Resource & Exploration Kit', 'journey.public.sharedVia': 'Dibagikan melalui', 'journey.public.madeWith': 'Dibuat dengan', // Journey — PDF Export 'journey.pdf.journeyBook': 'Buku Journey', 'journey.pdf.madeWith': 'Dibuat dengan TREK', 'journey.pdf.day': 'Hari', 'journey.pdf.theEnd': 'Tamat', 'journey.pdf.saveAsPdf': 'Simpan sebagai PDF', 'journey.pdf.pages': 'halaman', 'journey.picker.tripPeriod': 'Periode Perjalanan', 'journey.picker.dateRange': 'Rentang Tanggal', 'journey.picker.allPhotos': 'Semua Foto', 'journey.picker.albums': 'Album', 'journey.picker.selected': 'dipilih', 'journey.picker.addTo': 'Tambahkan ke', 'journey.picker.newGallery': 'Galeri Baru', 'journey.picker.selectAll': 'Pilih semua', 'journey.picker.deselectAll': 'Batalkan semua', 'journey.picker.noAlbums': 'Tidak ada album ditemukan', 'journey.picker.selectDate': 'Pilih tanggal', 'journey.picker.search': 'Cari', // Dashboard Mobile 'dashboard.greeting.morning': 'Selamat pagi,', 'dashboard.greeting.afternoon': 'Selamat siang,', 'dashboard.greeting.evening': 'Selamat malam,', 'dashboard.mobile.liveNow': 'Sedang Berlangsung', 'dashboard.mobile.tripProgress': 'Progres perjalanan', 'dashboard.mobile.daysLeft': '{count} hari lagi', 'dashboard.mobile.places': 'Tempat', 'dashboard.mobile.buddies': 'Teman', 'dashboard.mobile.newTrip': 'Perjalanan Baru', 'dashboard.mobile.currency': 'Mata Uang', 'dashboard.mobile.timezone': 'Zona Waktu', 'dashboard.mobile.upcomingTrips': 'Perjalanan Mendatang', 'dashboard.mobile.yourTrips': 'Perjalananmu', 'dashboard.mobile.trips': 'perjalanan', 'dashboard.mobile.starts': 'Mulai', 'dashboard.mobile.duration': 'Durasi', 'dashboard.mobile.day': 'hari', 'dashboard.mobile.days': 'hari', 'dashboard.mobile.ongoing': 'Sedang berlangsung', 'dashboard.mobile.startsToday': 'Mulai hari ini', 'dashboard.mobile.tomorrow': 'Besok', 'dashboard.mobile.inDays': 'Dalam {count} hari', 'dashboard.mobile.inMonths': 'Dalam {count} bulan', 'dashboard.mobile.completed': 'Selesai', 'dashboard.mobile.currencyConverter': 'Konverter Mata Uang', // BottomNav & Profile 'nav.profile': 'Profil', 'nav.bottomSettings': 'Pengaturan', 'nav.bottomAdmin': 'Pengaturan Admin', 'nav.bottomLogout': 'Keluar', 'nav.bottomAdminBadge': 'Admin', // DayPlan Mobile 'dayplan.mobile.addPlace': 'Tambah Tempat', 'dayplan.mobile.searchPlaces': 'Cari tempat...', 'dayplan.mobile.allAssigned': 'Semua tempat sudah ditugaskan', 'dayplan.mobile.noMatch': 'Tidak ditemukan', 'dayplan.mobile.createNew': 'Buat tempat baru', 'admin.addons.catalog.journey.name': 'Journey', 'admin.addons.catalog.journey.description': 'Pelacakan perjalanan & jurnal dengan check-in, foto, dan cerita harian', // OAuth scope groups 'oauth.scope.group.trips': 'Perjalanan', 'oauth.scope.group.places': 'Tempat', 'oauth.scope.group.atlas': 'Atlas', 'oauth.scope.group.packing': 'Perlengkapan', 'oauth.scope.group.todos': 'To-do', 'oauth.scope.group.budget': 'Anggaran', 'oauth.scope.group.reservations': 'Reservasi', 'oauth.scope.group.collab': 'Kolaborasi', 'oauth.scope.group.notifications': 'Notifikasi', 'oauth.scope.group.vacay': 'Liburan', 'oauth.scope.group.geo': 'Geo', 'oauth.scope.group.weather': 'Cuaca', // OAuth scope labels & descriptions 'oauth.scope.trips:read.label': 'Lihat perjalanan & itinerari', 'oauth.scope.trips:read.description': 'Baca perjalanan, hari, catatan harian, dan anggota', 'oauth.scope.trips:write.label': 'Edit perjalanan & itinerari', 'oauth.scope.trips:write.description': 'Buat dan perbarui perjalanan, hari, catatan, dan kelola anggota', 'oauth.scope.trips:delete.label': 'Hapus perjalanan', 'oauth.scope.trips:delete.description': 'Hapus permanen seluruh perjalanan — tindakan ini tidak dapat dibatalkan', 'oauth.scope.trips:share.label': 'Kelola tautan berbagi', 'oauth.scope.trips:share.description': 'Buat, perbarui, dan cabut tautan berbagi publik untuk perjalanan', 'oauth.scope.places:read.label': 'Lihat tempat & data peta', 'oauth.scope.places:read.description': 'Baca tempat, penugasan hari, tag, dan kategori', 'oauth.scope.places:write.label': 'Kelola tempat', 'oauth.scope.places:write.description': 'Buat, perbarui, dan hapus tempat, penugasan, dan tag', 'oauth.scope.atlas:read.label': 'Lihat Atlas', 'oauth.scope.atlas:read.description': 'Baca negara yang dikunjungi, wilayah, dan daftar impian', 'oauth.scope.atlas:write.label': 'Kelola Atlas', 'oauth.scope.atlas:write.description': 'Tandai negara dan wilayah yang dikunjungi, kelola daftar impian', 'oauth.scope.packing:read.label': 'Lihat daftar perlengkapan', 'oauth.scope.packing:read.description': 'Baca barang perlengkapan, tas, dan penugasan kategori', 'oauth.scope.packing:write.label': 'Kelola daftar perlengkapan', 'oauth.scope.packing:write.description': 'Tambah, perbarui, hapus, centang, dan urutkan barang dan tas', 'oauth.scope.todos:read.label': 'Lihat daftar to-do', 'oauth.scope.todos:read.description': 'Baca item to-do perjalanan dan penugasan kategori', 'oauth.scope.todos:write.label': 'Kelola daftar to-do', 'oauth.scope.todos:write.description': 'Buat, perbarui, centang, hapus, dan urutkan item to-do', 'oauth.scope.budget:read.label': 'Lihat anggaran', 'oauth.scope.budget:read.description': 'Baca item anggaran dan rincian pengeluaran', 'oauth.scope.budget:write.label': 'Kelola anggaran', 'oauth.scope.budget:write.description': 'Buat, perbarui, dan hapus item anggaran', 'oauth.scope.reservations:read.label': 'Lihat reservasi', 'oauth.scope.reservations:read.description': 'Baca reservasi dan detail akomodasi', 'oauth.scope.reservations:write.label': 'Kelola reservasi', 'oauth.scope.reservations:write.description': 'Buat, perbarui, hapus, dan urutkan reservasi', 'oauth.scope.collab:read.label': 'Lihat kolaborasi', 'oauth.scope.collab:read.description': 'Baca catatan, polling, dan pesan kolaborasi', 'oauth.scope.collab:write.label': 'Kelola kolaborasi', 'oauth.scope.collab:write.description': 'Buat, perbarui, dan hapus catatan, polling, dan pesan kolaborasi', 'oauth.scope.notifications:read.label': 'Lihat notifikasi', 'oauth.scope.notifications:read.description': 'Baca notifikasi dalam aplikasi dan jumlah yang belum dibaca', 'oauth.scope.notifications:write.label': 'Kelola notifikasi', 'oauth.scope.notifications:write.description': 'Tandai notifikasi sebagai telah dibaca dan tanggapi', 'oauth.scope.vacay:read.label': 'Lihat rencana liburan', 'oauth.scope.vacay:read.description': 'Baca data perencanaan liburan, entri, dan statistik', 'oauth.scope.vacay:write.label': 'Kelola rencana liburan', 'oauth.scope.vacay:write.description': 'Buat dan kelola entri liburan, hari libur, dan rencana tim', 'oauth.scope.geo:read.label': 'Peta & geokoding', 'oauth.scope.geo:read.description': 'Cari lokasi, selesaikan URL peta, dan geokode terbalik koordinat', 'oauth.scope.weather:read.label': 'Prakiraan cuaca', 'oauth.scope.weather:read.description': 'Ambil prakiraan cuaca untuk lokasi dan tanggal perjalanan', // System notices 'system_notice.welcome_v1.title': 'Selamat datang di TREK', 'system_notice.welcome_v1.body': 'Perencana perjalanan lengkap Anda. Buat itinerari, bagikan perjalanan dengan teman, dan tetap terorganisir — online maupun offline.', 'system_notice.welcome_v1.cta_label': 'Rencanakan perjalanan', 'system_notice.welcome_v1.hero_alt': 'Destinasi wisata indah dengan antarmuka TREK', 'system_notice.welcome_v1.highlight_plan': 'Itinerari harian untuk setiap perjalanan', 'system_notice.welcome_v1.highlight_share': 'Berkolaborasi dengan teman perjalanan', 'system_notice.welcome_v1.highlight_offline': 'Bekerja offline di ponsel', 'system_notice.dev_test_modal.title': '[Dev] Test notice', 'system_notice.dev_test_modal.body': 'This is a dev-only test notice.', 'system_notice.pager.prev': 'Pemberitahuan sebelumnya', 'system_notice.pager.next': 'Pemberitahuan berikutnya', 'system_notice.pager.counter': '{current} / {total}', 'system_notice.pager.goto': 'Pergi ke pemberitahuan {n}', 'system_notice.pager.position': 'Pemberitahuan {current} dari {total}', // System notices — 3.0.0 upgrade 'system_notice.v3_photos.title': 'Foto dipindahkan di 3.0', 'system_notice.v3_photos.body': '**Foto** di Perencana Perjalanan telah dihapus. Foto Anda aman — TREK tidak pernah mengubah perpustakaan Immich atau Synology Anda.\n\nFoto kini ada di addon **Journey**. Journey bersifat opsional — jika belum tersedia, minta admin untuk mengaktifkannya di Admin → Addon.', 'system_notice.v3_journey.title': 'Kenali Journey — jurnal perjalanan', 'system_notice.v3_journey.body': 'Dokumentasikan perjalanan Anda sebagai cerita hidup dengan linimasa, galeri foto, dan peta interaktif.', 'system_notice.v3_journey.cta_label': 'Buka Journey', 'system_notice.v3_journey.highlight_timeline': 'Linimasa & galeri', 'system_notice.v3_journey.highlight_photos': 'Impor dari Immich atau Synology', 'system_notice.v3_journey.highlight_share': 'Bagikan secara publik — tanpa login', 'system_notice.v3_journey.highlight_export': 'Ekspor sebagai buku foto PDF', 'system_notice.v3_features.title': 'Sorotan lain di 3.0', 'system_notice.v3_features.body': 'Beberapa pembaruan lain dalam rilis ini.', 'system_notice.v3_features.highlight_dashboard': 'Desain ulang dashboard mobile-first', 'system_notice.v3_features.highlight_offline': 'Mode offline penuh sebagai PWA', 'system_notice.v3_features.highlight_search': 'Pelengkapan otomatis tempat secara real-time', 'system_notice.v3_features.highlight_import': 'Impor tempat dari file KMZ/KML', // System notices — MCP OAuth 2.1 upgrade 'system_notice.v3_mcp.title': 'MCP: pembaruan OAuth 2.1', 'system_notice.v3_mcp.body': 'Integrasi MCP telah sepenuhnya diperbarui. OAuth 2.1 kini menjadi metode autentikasi yang direkomendasikan. Token statis (trek_…) sudah usang dan akan dihapus pada versi mendatang.', 'system_notice.v3_mcp.highlight_oauth': 'OAuth 2.1 direkomendasikan (mcp-remote)', 'system_notice.v3_mcp.highlight_scopes': '24 cakupan izin yang terperinci', 'system_notice.v3_mcp.highlight_deprecated': 'Token statis trek_ sudah usang', 'system_notice.v3_mcp.highlight_tools': 'Perangkat dan prompt yang diperluas', }; export default id;