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