const id: Record<string, string | { name: string; category: string }[]> = {
  // 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.select': 'Pilih',
  'common.selectAll': 'Pilih semua',
  'common.deselectAll': 'Batalkan semua pilihan',
  '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.discardChanges': 'Buang perubahan',
  'common.discard': 'Buang',
  '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.mapProvider': 'Penyedia peta',
  'settings.mapProviderHint': 'Berlaku untuk peta Trip Planner dan Journey. Atlas selalu menggunakan Leaflet.',
  'settings.mapLeafletSubtitle': 'Klasik 2D, tile raster apa pun',
  'settings.mapMapboxSubtitle': 'Tile vektor, bangunan 3D & medan',
  'settings.mapExperimental': 'Eksperimental',
  'settings.mapMapboxToken': 'Token akses Mapbox',
  'settings.mapMapboxTokenHint': 'Token publik (pk.*) dari',
  'settings.mapMapboxTokenLink': 'mapbox.com → Token akses',
  'settings.mapStyle': 'Gaya peta',
  'settings.mapStylePlaceholder': 'Pilih gaya Mapbox',
  'settings.mapStyleHint': 'Preset atau URL mapbox://styles/USER/ID milikmu',
  'settings.map3dBuildings': 'Bangunan 3D & medan',
  'settings.map3dHint': 'Kemiringan + ekstrusi bangunan 3D nyata — bekerja di semua gaya, termasuk satelit.',
  'settings.mapHighQuality': 'Mode kualitas tinggi',
  'settings.mapHighQualityHint': 'Antialiasing + proyeksi globe untuk tepi yang lebih tajam dan tampilan dunia realistis.',
  'settings.mapHighQualityWarning': 'Dapat memengaruhi performa pada perangkat kelas bawah.',
  'settings.mapTipLabel': 'Tip:',
  'settings.mapTip': 'Klik kanan dan seret untuk memutar/memiringkan peta. Klik tengah untuk menambah tempat (klik kanan untuk rotasi).',
  '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.notifyTodoDue': 'Tugas jatuh tempo',
  '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.notifications.tripReminders.title': 'Pengingat Perjalanan',
  'admin.notifications.tripReminders.hint': 'Mengirim notifikasi pengingat sebelum perjalanan dimulai (memerlukan hari pengingat yang diatur pada perjalanan).',
  'admin.notifications.tripReminders.enabled': 'Pengingat perjalanan diaktifkan',
  'admin.notifications.tripReminders.disabled': 'Pengingat perjalanan dinonaktifkan',
  '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 <your_token> 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 <your_client_id> dan <your_client_secret> 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.supporters.badge': 'Pendukung Bulanan',
  'settings.about.supporters.title': 'Rekan perjalanan untuk TREK',
  'settings.about.supporters.subtitle': 'Saat kamu merencanakan rute berikutnya, orang-orang ini ikut merencanakan masa depan TREK. Kontribusi bulanan mereka langsung masuk ke pengembangan dan jam kerja nyata — supaya TREK tetap Open Source.',
  'settings.about.supporters.since': 'pendukung sejak {date}',
  'settings.about.supporters.tierEmpty': 'Jadilah yang pertama',
  'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
  'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
  'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer',
  'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
  'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
  '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',
  'login.forgotPassword': 'Lupa kata sandi?',
  'login.forgotPasswordTitle': 'Setel ulang kata sandi',
  'login.forgotPasswordBody': 'Masukkan alamat email akunmu. Jika akun ada, kami akan mengirim tautan reset.',
  'login.forgotPasswordSubmit': 'Kirim tautan',
  'login.forgotPasswordSentTitle': 'Periksa email kamu',
  'login.forgotPasswordSentBody': 'Jika ada akun dengan email tersebut, tautannya sedang dikirim. Berlaku 60 menit.',
  'login.forgotPasswordSmtpHintOff': 'Catatan: administrator belum mengonfigurasi SMTP, jadi tautan reset akan ditulis ke konsol server alih-alih dikirim lewat email.',
  'login.backToLogin': 'Kembali ke login',
  'login.newPassword': 'Kata sandi baru',
  'login.confirmPassword': 'Konfirmasi kata sandi baru',
  'login.passwordsDontMatch': 'Kata sandi tidak cocok',
  'login.mfaCode': 'Kode 2FA',
  'login.resetPasswordTitle': 'Tetapkan kata sandi baru',
  'login.resetPasswordBody': 'Pilih kata sandi kuat yang belum pernah kamu pakai di sini. Minimal 8 karakter.',
  'login.resetPasswordMfaBody': 'Masukkan kode 2FA atau kode cadangan untuk menyelesaikan reset.',
  'login.resetPasswordSubmit': 'Setel ulang kata sandi',
  'login.resetPasswordVerify': 'Verifikasi & setel ulang',
  'login.resetPasswordSuccessTitle': 'Kata sandi diperbarui',
  'login.resetPasswordSuccessBody': 'Sekarang kamu bisa login dengan kata sandi baru.',
  'login.resetPasswordInvalidLink': 'Tautan tidak valid',
  'login.resetPasswordInvalidLinkBody': 'Tautan hilang atau rusak. Minta tautan baru untuk melanjutkan.',
  'login.resetPasswordFailed': 'Reset gagal. Tautan mungkin sudah kedaluwarsa.',

  // 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.placesPhotos.title': 'Foto Tempat',
  'admin.placesPhotos.subtitle': 'Mengambil foto dari Google Places API. Nonaktifkan untuk menghemat kuota API. Foto Wikimedia tidak terpengaruh.',
  'admin.placesAutocomplete.title': 'Pelengkapan Otomatis Tempat',
  'admin.placesAutocomplete.subtitle': 'Menggunakan Google Places API untuk saran pencarian. Nonaktifkan untuk menghemat kuota API.',
  'admin.placesDetails.title': 'Detail Tempat',
  'admin.placesDetails.subtitle': 'Mengambil informasi detail tempat (jam, penilaian, situs web) dari Google Places API. Nonaktifkan untuk menghemat kuota API.',
  '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.transports': 'Transportasi',
  '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?',
  'trip.confirm.deletePlaces': 'Hapus {count} tempat?',
  'trip.toast.placesDeleted': '{count} tempat dihapus',

  // 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.gpxImportTypes': 'Apa yang ingin diimpor?',
  'places.gpxImportWaypoints': 'Titik jalan',
  'places.gpxImportRoutes': 'Rute',
  'places.gpxImportTracks': 'Trek (dengan geometri jalur)',
  'places.gpxImportNoneSelected': 'Pilih setidaknya satu jenis untuk diimpor.',
  'places.kmlImportTypes': 'Apa yang ingin diimpor?',
  'places.kmlImportPoints': 'Titik (Placemarks)',
  'places.kmlImportPaths': 'Jalur (LineStrings)',
  'places.kmlImportNoneSelected': 'Pilih setidaknya satu jenis.',
  'places.selectionCount': '{count} dipilih',
  'places.deleteSelected': 'Hapus yang dipilih',
  '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.filterTracks': 'Trek',
  '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.needsReview': 'Tinjau',
  'reservations.needsReviewHint': 'Bandara tidak dapat dicocokkan otomatis — konfirmasi lokasi.',
  'reservations.searchLocation': 'Cari stasiun, pelabuhan, alamat...',
  'airport.searchPlaceholder': 'Kode bandara atau kota (mis. FRA)',
  'map.connections': 'Koneksi',
  'map.showConnections': 'Tampilkan rute pemesanan',
  'map.hideConnections': 'Sembunyikan rute pemesanan',
  'settings.bookingLabels': 'Label rute pemesanan',
  'settings.bookingLabelsHint': 'Menampilkan nama stasiun / bandara di peta. Jika mati, hanya ikon ditampilkan.',
  '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',
  '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',
  'reservations.addBooking': 'Tambah pemesanan',

  // 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.download': 'Unduh',
  'files.openError': 'Tidak dapat membuka file',
  '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.sourceTransport': 'Transportasi',
  '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.assignTransport': 'Transportasi',
  '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.immichAutoUpload': 'Salin foto journey ke Immich saat diunggah',
  'memories.providerUrlHintSynology': 'Sertakan path aplikasi Photos di URL, mis. https://nas:5001/photo',
  'memories.testConnection': 'Uji koneksi',
  'memories.testShort': 'Uji',
  '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.deletePlaces': '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': 'Tugas baru',
  'todo.sidebar.sortBy': 'Urutkan',
  'todo.priority': 'Prioritas',
  'todo.newCategoryLabel': 'baru',
  'budget.categoriesLabel': 'kategori',
  '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.todo_due.title': 'Tugas jatuh tempo',
  'notif.todo_due.text': '{todo} di {trip} jatuh tempo pada {due}',
  '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.search.placeholder': 'Cari perjalanan…',
  'journey.search.noResults': 'Tidak ada perjalanan yang cocok dengan "{query}"',
  '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.status.archived': 'Diarsipkan',
  '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 <strong>{title}</strong> 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.discardChangesConfirm': 'Anda memiliki perubahan yang belum disimpan. Buang?',
  '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.endJourney': 'Arsipkan Perjalanan',
  'journey.settings.reopenJourney': 'Pulihkan Perjalanan',
  'journey.settings.archived': 'Perjalanan diarsipkan',
  'journey.settings.reopened': 'Perjalanan dibuka kembali',
  'journey.settings.endDescription': 'Menyembunyikan lencana Langsung. Anda dapat membuka kembali kapan saja.',
  '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.group.journey': 'Journey',

  // 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',
  'oauth.scope.journey:read.label': 'Lihat Journey',
  'oauth.scope.journey:read.description': 'Baca Journey, entri, dan daftar kontributor',
  'oauth.scope.journey:write.label': 'Kelola Journey',
  'oauth.scope.journey:write.description': 'Buat, perbarui, dan hapus Journey beserta entrinya',
  'oauth.scope.journey:share.label': 'Kelola tautan Journey',
  'oauth.scope.journey:share.description': 'Buat, perbarui, dan cabut tautan berbagi publik untuk Journey',



  // 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',

  // System notices — personal thank you
  'system_notice.v3_thankyou.title': 'Catatan pribadi dari saya',
  'system_notice.v3_thankyou.body': 'Sebelum kamu lanjut — saya ingin berhenti sejenak.\n\nTREK dimulai sebagai proyek sampingan yang saya buat untuk perjalanan saya sendiri. Saya tidak pernah membayangkan ia akan tumbuh menjadi sesuatu yang dipercaya oleh 4.000 dari kalian untuk merencanakan petualangan. Setiap bintang, setiap issue, setiap permintaan fitur — saya membaca semuanya, dan itulah yang membuat saya terus bertahan di malam-malam larut antara pekerjaan penuh waktu dan kuliah.\n\nSaya ingin kalian tahu: TREK akan selalu open source, selalu self-hosted, selalu milik kalian. Tanpa pelacakan, tanpa langganan, tanpa syarat tersembunyi. Hanya sebuah alat yang dibuat oleh seseorang yang mencintai traveling sama seperti kalian.\n\nTerima kasih khusus untuk [jubnl](https://github.com/jubnl) — kamu telah menjadi kolaborator yang luar biasa. Begitu banyak hal yang membuat versi 3.0 hebat memiliki jejakmu. Terima kasih telah percaya pada proyek ini ketika masih kasar.\n\nDan untuk setiap dari kalian yang melaporkan bug, menerjemahkan string, membagikan TREK kepada teman, atau sekadar menggunakannya untuk merencanakan perjalanan — **terima kasih**. Kalianlah alasan semua ini ada.\n\nUntuk lebih banyak petualangan bersama.\n\n— Maurice\n\n---\n\n[Bergabunglah dengan komunitas di Discord](https://discord.gg/7Q6M6jDwzf)\n\nJika TREK membuat perjalananmu lebih baik, [secangkir kopi kecil](https://ko-fi.com/mauriceboe) selalu membantu menjaga lampu tetap menyala.',
  // System notices — 3.0.14
  'system_notice.v3014_whitespace_collision.title': 'Tindakan diperlukan: konflik akun pengguna',
  'system_notice.v3014_whitespace_collision.body': 'Pembaruan 3.0.14 mendeteksi satu atau lebih konflik nama pengguna atau email yang disebabkan oleh spasi di awal atau akhir nilai yang tersimpan. Akun yang terpengaruh telah diganti nama secara otomatis. Periksa log server untuk baris yang dimulai dengan **[migration] WHITESPACE COLLISION** guna mengidentifikasi akun mana yang perlu ditinjau.',
  'transport.addTransport': 'Tambah transportasi',
  'transport.modalTitle.create': 'Tambah transportasi',
  'transport.modalTitle.edit': 'Edit transportasi',
  'transport.title': 'Transportasi',
  'transport.addManual': 'Transportasi Manual',
};

export default id;
