mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-21 14:21:46 +00:00
fix(costs): rework the cost panel UX wise and apply prettier on the shared package
This commit is contained in:
+45
-84
@@ -2,8 +2,7 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const admin: TranslationStrings = {
|
||||
'admin.notifications.title': 'Notifikasi',
|
||||
'admin.notifications.hint':
|
||||
'Pilih satu saluran notifikasi. Hanya satu yang bisa aktif sekaligus.',
|
||||
'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',
|
||||
@@ -15,17 +14,14 @@ const admin: TranslationStrings = {
|
||||
'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.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.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.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.',
|
||||
@@ -42,28 +38,23 @@ const admin: TranslationStrings = {
|
||||
'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.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.adminNtfyPanel.alwaysOnHint': 'Admin Ntfy selalu berjalan jika topik dikonfigurasi',
|
||||
'admin.notifications.adminNotificationsHint':
|
||||
'Atur saluran mana yang mengirimkan notifikasi khusus admin (mis. peringatan versi).',
|
||||
'admin.notifications.tripReminders.title': 'Pengingat Perjalanan',
|
||||
'admin.notifications.tripReminders.hint':
|
||||
'Mengirim notifikasi pengingat sebelum perjalanan dimulai (memerlukan hari pengingat yang diatur pada perjalanan).',
|
||||
'admin.notifications.tripReminders.enabled':
|
||||
'Pengingat perjalanan diaktifkan',
|
||||
'admin.notifications.tripReminders.disabled':
|
||||
'Pengingat perjalanan dinonaktifkan',
|
||||
'admin.notifications.tripReminders.enabled': 'Pengingat perjalanan diaktifkan',
|
||||
'admin.notifications.tripReminders.disabled': 'Pengingat perjalanan dinonaktifkan',
|
||||
'admin.smtp.title': 'Email & Notifikasi',
|
||||
'admin.smtp.hint': 'Konfigurasi SMTP untuk pengiriman notifikasi email.',
|
||||
'admin.smtp.testButton': 'Kirim email uji',
|
||||
'admin.webhook.hint':
|
||||
'Izinkan pengguna mengatur URL webhook sendiri untuk notifikasi (Discord, Slack, dll.).',
|
||||
'admin.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',
|
||||
'admin.title': 'Administrasi',
|
||||
@@ -88,8 +79,7 @@ const admin: TranslationStrings = {
|
||||
'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.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',
|
||||
@@ -100,8 +90,7 @@ const admin: TranslationStrings = {
|
||||
'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.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',
|
||||
@@ -126,11 +115,9 @@ const admin: TranslationStrings = {
|
||||
'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.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.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',
|
||||
@@ -142,11 +129,9 @@ const admin: TranslationStrings = {
|
||||
'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.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.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',
|
||||
@@ -157,19 +142,16 @@ const admin: TranslationStrings = {
|
||||
'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.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.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.',
|
||||
'admin.fileTypes': 'Jenis File yang Diizinkan',
|
||||
'admin.fileTypesHint':
|
||||
'Atur jenis file apa saja yang boleh diunggah pengguna.',
|
||||
'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',
|
||||
@@ -183,8 +165,7 @@ const admin: TranslationStrings = {
|
||||
'admin.placesDetails.subtitle':
|
||||
'Mengambil informasi detail tempat (jam, penilaian, situs web) dari Google Places API. Nonaktifkan untuk menghemat kuota API.',
|
||||
'admin.bagTracking.title': 'Pelacak Tas',
|
||||
'admin.bagTracking.subtitle':
|
||||
'Aktifkan berat dan penugasan tas untuk item packing',
|
||||
'admin.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',
|
||||
@@ -203,11 +184,9 @@ const admin: TranslationStrings = {
|
||||
'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.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.namePlaceholder': 'Nama template (contoh: Liburan Pantai)',
|
||||
'admin.packingTemplates.empty': 'Belum ada template yang dibuat',
|
||||
'admin.packingTemplates.items': 'item',
|
||||
'admin.packingTemplates.categories': 'kategori',
|
||||
@@ -223,34 +202,24 @@ const admin: TranslationStrings = {
|
||||
'admin.packingTemplates.saveError': 'Gagal menyimpan',
|
||||
'admin.tabs.addons': 'Addon',
|
||||
'admin.addons.title': 'Addon',
|
||||
'admin.addons.subtitle':
|
||||
'Aktifkan atau nonaktifkan fitur untuk menyesuaikan pengalaman TREK kamu.',
|
||||
'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.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.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.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.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.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.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.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.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',
|
||||
@@ -258,10 +227,8 @@ const admin: TranslationStrings = {
|
||||
'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.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',
|
||||
@@ -272,16 +239,14 @@ const admin: TranslationStrings = {
|
||||
'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.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.',
|
||||
'admin.tabs.mcpTokens': 'Akses MCP',
|
||||
'admin.mcpTokens.title': 'Akses MCP',
|
||||
'admin.mcpTokens.subtitle':
|
||||
'Kelola sesi OAuth dan token API di semua pengguna',
|
||||
'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',
|
||||
@@ -302,14 +267,12 @@ const admin: TranslationStrings = {
|
||||
'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.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.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',
|
||||
@@ -340,14 +303,12 @@ const admin: TranslationStrings = {
|
||||
'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.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.backupHint': 'Kami merekomendasikan membuat backup sebelum memperbarui.',
|
||||
'admin.update.backupLink': 'Pergi ke Backup',
|
||||
'admin.update.howTo': 'Cara Memperbarui',
|
||||
'admin.update.dockerText':
|
||||
@@ -355,11 +316,9 @@ const admin: TranslationStrings = {
|
||||
'admin.update.reloadHint': 'Muat ulang halaman dalam beberapa detik.',
|
||||
'admin.tabs.permissions': 'Izin',
|
||||
'admin.addons.catalog.journey.name': 'Journey',
|
||||
'admin.addons.catalog.journey.description':
|
||||
'Pelacakan perjalanan & jurnal dengan check-in, foto, dan cerita harian',
|
||||
'admin.addons.catalog.journey.description': 'Pelacakan perjalanan & jurnal dengan check-in, foto, dan cerita harian',
|
||||
'admin.passkey.title': 'Login dengan passkey',
|
||||
'admin.passkey.cardHint':
|
||||
'Izinkan pengguna masuk dengan passkey (WebAuthn). Nonaktif secara default.',
|
||||
'admin.passkey.cardHint': 'Izinkan pengguna masuk dengan passkey (WebAuthn). Nonaktif secara default.',
|
||||
'admin.passkey.login': 'Aktifkan login dengan passkey',
|
||||
'admin.passkey.loginHint':
|
||||
'Tampilkan opsi "Masuk dengan passkey" dan izinkan pengguna mendaftarkan passkey di pengaturan mereka.',
|
||||
@@ -377,11 +336,13 @@ const admin: TranslationStrings = {
|
||||
'admin.passkey.resetConfirm': 'Hapus semua passkey untuk {name}?',
|
||||
'admin.passkey.resetDone': 'Menghapus {count} passkey',
|
||||
'admin.defaultSettings.mapProvider': 'Mesin peta',
|
||||
'admin.defaultSettings.mapProviderHint': 'Peta default untuk semua orang di instance ini. Setiap pengguna tetap dapat menggantinya di pengaturan masing-masing.',
|
||||
'admin.defaultSettings.mapProviderHint':
|
||||
'Peta default untuk semua orang di instance ini. Setiap pengguna tetap dapat menggantinya di pengaturan masing-masing.',
|
||||
'admin.defaultSettings.providerLeaflet': 'Standar (gratis)',
|
||||
'admin.defaultSettings.providerMapbox': 'Mapbox (3D)',
|
||||
'admin.defaultSettings.mapboxToken': 'Token Mapbox bersama',
|
||||
'admin.defaultSettings.mapboxTokenHint': 'Digunakan untuk setiap pengguna yang belum memasukkan token mereka sendiri — sehingga seluruh instance mendapatkan Mapbox tanpa perlu membagikan kunci satu per satu. Disimpan dalam bentuk terenkripsi.',
|
||||
'admin.defaultSettings.mapboxTokenHint':
|
||||
'Digunakan untuk setiap pengguna yang belum memasukkan token mereka sendiri — sehingga seluruh instance mendapatkan Mapbox tanpa perlu membagikan kunci satu per satu. Disimpan dalam bentuk terenkripsi.',
|
||||
'admin.defaultSettings.mapboxStyle': 'Gaya peta',
|
||||
'admin.defaultSettings.mapboxStylePlaceholder': 'Pilih gaya…',
|
||||
'admin.defaultSettings.mapbox3d': 'Bangunan & medan 3D',
|
||||
|
||||
@@ -30,8 +30,7 @@ const atlas: TranslationStrings = {
|
||||
'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.noDataHint': 'Buat perjalanan dan tambahkan tempat untuk melihat peta duniamu',
|
||||
'atlas.lastTrip': 'Perjalanan terakhir',
|
||||
'atlas.nextTrip': 'Perjalanan berikutnya',
|
||||
'atlas.daysLeft': 'hari lagi',
|
||||
|
||||
@@ -12,10 +12,8 @@ const backup: TranslationStrings = {
|
||||
'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.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',
|
||||
@@ -31,15 +29,13 @@ const backup: TranslationStrings = {
|
||||
'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.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.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',
|
||||
@@ -70,8 +66,7 @@ const backup: TranslationStrings = {
|
||||
'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.restoreTip': 'Tips: Buat cadangan kondisi saat ini sebelum memulihkan.',
|
||||
'backup.restoreConfirm': 'Ya, pulihkan',
|
||||
};
|
||||
export default backup;
|
||||
|
||||
@@ -4,8 +4,7 @@ const budget: TranslationStrings = {
|
||||
'budget.title': 'Anggaran',
|
||||
'budget.exportCsv': 'Ekspor CSV',
|
||||
'budget.emptyTitle': 'Belum ada anggaran',
|
||||
'budget.emptyText':
|
||||
'Buat kategori dan entri untuk merencanakan anggaran perjalananmu',
|
||||
'budget.emptyText': 'Buat kategori dan entri untuk merencanakan anggaran perjalananmu',
|
||||
'budget.emptyPlaceholder': 'Masukkan nama kategori...',
|
||||
'budget.createCategory': 'Buat Kategori',
|
||||
'budget.category': 'Kategori',
|
||||
@@ -27,8 +26,7 @@ const budget: TranslationStrings = {
|
||||
'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.confirm.deleteCategory': 'Yakin ingin menghapus kategori "{name}" dengan {count} entri?',
|
||||
'budget.deleteCategory': 'Hapus Kategori',
|
||||
'budget.perPerson': 'Per Orang',
|
||||
'budget.paid': 'Sudah dibayar',
|
||||
@@ -39,78 +37,85 @@ const budget: TranslationStrings = {
|
||||
'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',
|
||||
'budget.categoriesLabel': 'kategori',
|
||||
"costs.you": "Kamu",
|
||||
"costs.youShort": "K",
|
||||
"costs.youLower": "kamu",
|
||||
"costs.youOwe": "Kamu berhutang",
|
||||
"costs.youOweSub": "Kamu harus membayar yang lain",
|
||||
"costs.youreOwed": "Kamu dipinjami",
|
||||
"costs.youreOwedSub": "Yang lain harus membayarmu",
|
||||
"costs.totalSpend": "Total pengeluaran perjalanan",
|
||||
"costs.totalSpendSub": "Untuk semua pelancong",
|
||||
"costs.to": "Ke",
|
||||
"costs.from": "Dari",
|
||||
"costs.allSettled": "Semua sudah lunas",
|
||||
"costs.nothingOwed": "Tidak ada yang berhutang padamu",
|
||||
"costs.yourShare": "Bagianmu",
|
||||
"costs.youPaid": "Kamu membayar",
|
||||
"costs.expenses": "Pengeluaran",
|
||||
"costs.entries": "{count} entri",
|
||||
"costs.searchPlaceholder": "Cari pengeluaran…",
|
||||
"costs.filter.all": "Semua",
|
||||
"costs.filter.mine": "Dibayar olehku",
|
||||
"costs.filter.owed": "Dipinjami padaku",
|
||||
"costs.addExpense": "Tambah pengeluaran",
|
||||
"costs.editExpense": "Edit pengeluaran",
|
||||
"costs.noMatch": "Tidak ada pengeluaran yang cocok dengan pencarianmu.",
|
||||
"costs.emptyText": "Belum ada pengeluaran. Tambahkan yang pertama.",
|
||||
"costs.spent": "{amount} dibelanjakan",
|
||||
"costs.noDate": "Tanpa tanggal",
|
||||
"costs.noOnePaid": "Belum ada yang membayar",
|
||||
"costs.youLent": "kamu meminjamkan {amount}",
|
||||
"costs.youBorrowed": "kamu meminjam {amount}",
|
||||
"costs.settleUp": "Lunasi",
|
||||
"costs.history": "Riwayat",
|
||||
"costs.everyoneSquare": "Semua sudah impas",
|
||||
"costs.nothingOutstanding": "Tidak ada pembayaran tertunggak saat ini.",
|
||||
"costs.pay": "bayar",
|
||||
"costs.pays": "membayar",
|
||||
"costs.settle": "Lunasi",
|
||||
"costs.balances": "Saldo",
|
||||
"costs.byCategory": "Per kategori",
|
||||
"costs.noCategories": "Belum ada pengeluaran.",
|
||||
"costs.settleHistory": "Riwayat pelunasan",
|
||||
"costs.noSettlements": "Belum ada pembayaran yang dilunasi.",
|
||||
"costs.paymentsSettled": "{count} pembayaran dilunasi",
|
||||
"costs.paid": "dibayar",
|
||||
"costs.undo": "Urungkan",
|
||||
"costs.whatFor": "Untuk apa?",
|
||||
"costs.namePlaceholder": "mis. Makan malam, oleh-oleh, bensin…",
|
||||
"costs.totalAmount": "Jumlah total",
|
||||
"costs.currency": "Mata uang",
|
||||
"costs.day": "Hari",
|
||||
"costs.rateLabel": "1 {from} dalam {to}",
|
||||
"costs.category": "Kategori",
|
||||
"costs.whoPaid": "Siapa yang membayar?",
|
||||
"costs.splitBetween": "Bagi rata antara",
|
||||
"costs.pickSomeone": "Pilih setidaknya satu orang untuk berbagi.",
|
||||
"costs.splitSummary": "Dibagi {count} cara · {amount} masing-masing",
|
||||
"costs.cat.accommodation": "Akomodasi",
|
||||
"costs.cat.food": "Makanan & minuman",
|
||||
"costs.cat.groceries": "Belanja kebutuhan",
|
||||
"costs.cat.transport": "Transportasi",
|
||||
"costs.cat.flights": "Penerbangan",
|
||||
"costs.cat.activities": "Aktivitas",
|
||||
"costs.cat.sightseeing": "Wisata",
|
||||
"costs.cat.shopping": "Belanja",
|
||||
"costs.cat.fees": "Biaya & tiket",
|
||||
"costs.cat.health": "Kesehatan",
|
||||
"costs.cat.tips": "Tip",
|
||||
"costs.cat.other": "Lainnya",
|
||||
"costs.daysCount": "{count} hari",
|
||||
"costs.travelers": "{count} pelancong",
|
||||
"costs.liveRate": "kurs langsung",
|
||||
"costs.settleAll": "Lunasi semua",
|
||||
'costs.you': 'Kamu',
|
||||
'costs.youShort': 'K',
|
||||
'costs.youLower': 'kamu',
|
||||
'costs.youOwe': 'Kamu berhutang',
|
||||
'costs.youOweSub': 'Kamu harus membayar yang lain',
|
||||
'costs.youreOwed': 'Kamu dipinjami',
|
||||
'costs.youreOwedSub': 'Yang lain harus membayarmu',
|
||||
'costs.totalSpend': 'Total pengeluaran perjalanan',
|
||||
'costs.totalSpendSub': 'Untuk semua pelancong',
|
||||
'costs.to': 'Ke',
|
||||
'costs.from': 'Dari',
|
||||
'costs.allSettled': 'Semua sudah lunas',
|
||||
'costs.nothingOwed': 'Tidak ada yang berhutang padamu',
|
||||
'costs.yourShare': 'Bagianmu',
|
||||
'costs.youPaid': 'Kamu membayar',
|
||||
'costs.expenses': 'Pengeluaran',
|
||||
'costs.entries': '{count} entri',
|
||||
'costs.searchPlaceholder': 'Cari pengeluaran…',
|
||||
'costs.filter.all': 'Semua',
|
||||
'costs.filter.mine': 'Dibayar olehku',
|
||||
'costs.filter.owed': 'Dipinjami padaku',
|
||||
'costs.addExpense': 'Tambah pengeluaran',
|
||||
'costs.editExpense': 'Edit pengeluaran',
|
||||
'costs.noMatch': 'Tidak ada pengeluaran yang cocok dengan pencarianmu.',
|
||||
'costs.emptyText': 'Belum ada pengeluaran. Tambahkan yang pertama.',
|
||||
'costs.spent': '{amount} dibelanjakan',
|
||||
'costs.noDate': 'Tanpa tanggal',
|
||||
'costs.noOnePaid': 'Belum ada yang membayar',
|
||||
'costs.youLent': 'kamu meminjamkan {amount}',
|
||||
'costs.youBorrowed': 'kamu meminjam {amount}',
|
||||
'costs.settleUp': 'Lunasi',
|
||||
'costs.history': 'Riwayat',
|
||||
'costs.everyoneSquare': 'Semua sudah impas',
|
||||
'costs.nothingOutstanding': 'Tidak ada pembayaran tertunggak saat ini.',
|
||||
'costs.pay': 'bayar',
|
||||
'costs.pays': 'membayar',
|
||||
'costs.settle': 'Lunasi',
|
||||
'costs.balances': 'Saldo',
|
||||
'costs.byCategory': 'Per kategori',
|
||||
'costs.noCategories': 'Belum ada pengeluaran.',
|
||||
'costs.settleHistory': 'Riwayat pelunasan',
|
||||
'costs.noSettlements': 'Belum ada pembayaran yang dilunasi.',
|
||||
'costs.paymentsSettled': '{count} pembayaran dilunasi',
|
||||
'costs.paid': 'dibayar',
|
||||
'costs.undo': 'Urungkan',
|
||||
'costs.whatFor': 'Untuk apa?',
|
||||
'costs.namePlaceholder': 'mis. Makan malam, oleh-oleh, bensin…',
|
||||
'costs.totalAmount': 'Jumlah total',
|
||||
'costs.currency': 'Mata uang',
|
||||
'costs.day': 'Hari',
|
||||
'costs.rateLabel': '1 {from} dalam {to}',
|
||||
'costs.category': 'Kategori',
|
||||
'costs.whoPaid': 'Siapa yang membayar?',
|
||||
'costs.splitBetween': 'Bagi rata antara',
|
||||
'costs.pickSomeone': 'Pilih setidaknya satu orang untuk berbagi.',
|
||||
'costs.splitSummary': 'Dibagi {count} cara · {amount} masing-masing',
|
||||
'costs.cat.accommodation': 'Akomodasi',
|
||||
'costs.cat.food': 'Makanan & minuman',
|
||||
'costs.cat.groceries': 'Belanja kebutuhan',
|
||||
'costs.cat.transport': 'Transportasi',
|
||||
'costs.cat.flights': 'Penerbangan',
|
||||
'costs.cat.activities': 'Aktivitas',
|
||||
'costs.cat.sightseeing': 'Wisata',
|
||||
'costs.cat.shopping': 'Belanja',
|
||||
'costs.cat.fees': 'Biaya & tiket',
|
||||
'costs.cat.health': 'Kesehatan',
|
||||
'costs.cat.tips': 'Tip',
|
||||
'costs.cat.other': 'Lainnya',
|
||||
'costs.daysCount': '{count} hari',
|
||||
'costs.travelers': '{count} pelancong',
|
||||
'costs.liveRate': 'kurs langsung',
|
||||
'costs.settleAll': 'Lunasi semua',
|
||||
'costs.payment': 'Pembayaran',
|
||||
'costs.editPayment': 'Edit pembayaran',
|
||||
'costs.addPayment': 'Tambah pembayaran',
|
||||
'costs.unfinished': 'Belum selesai',
|
||||
'costs.unfinishedHint': 'Hanya total — belum diselesaikan',
|
||||
'costs.tapToInclude': 'Ketuk untuk menyertakan',
|
||||
'costs.amount': 'Jumlah',
|
||||
};
|
||||
|
||||
export default budget;
|
||||
|
||||
@@ -13,8 +13,7 @@ const categories: TranslationStrings = {
|
||||
'categories.defaultName': 'Kategori',
|
||||
'categories.update': 'Perbarui',
|
||||
'categories.create': 'Buat',
|
||||
'categories.confirm.delete':
|
||||
'Hapus kategori? Tempat dalam kategori ini tidak akan dihapus.',
|
||||
'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',
|
||||
|
||||
@@ -14,8 +14,7 @@ const collab: TranslationStrings = {
|
||||
'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.emptyDesc': 'Bagikan ide, rencana, dan update dengan grup perjalananmu',
|
||||
'collab.chat.today': 'Hari ini',
|
||||
'collab.chat.yesterday': 'Kemarin',
|
||||
'collab.chat.deletedMessage': 'menghapus pesan',
|
||||
|
||||
@@ -20,8 +20,7 @@ const dashboard: TranslationStrings = {
|
||||
'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.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!',
|
||||
@@ -55,8 +54,7 @@ const dashboard: TranslationStrings = {
|
||||
'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.confirm.delete': 'Hapus perjalanan "{title}"? Semua tempat dan rencana akan dihapus permanen.',
|
||||
'dashboard.editTrip': 'Edit Perjalanan',
|
||||
'dashboard.createTrip': 'Buat Perjalanan Baru',
|
||||
'dashboard.tripTitle': 'Judul',
|
||||
@@ -66,10 +64,8 @@ const dashboard: TranslationStrings = {
|
||||
'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.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',
|
||||
|
||||
@@ -7,10 +7,8 @@ const day: TranslationStrings = {
|
||||
'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.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',
|
||||
|
||||
@@ -3,18 +3,15 @@ import type { TranslationStrings } from '../types';
|
||||
const dayplan: TranslationStrings = {
|
||||
'dayplan.icsTooltip': 'Ekspor kalender (ICS)',
|
||||
'dayplan.emptyDay': 'Belum ada tempat yang direncanakan untuk hari ini',
|
||||
'dayplan.cannotReorderTransport':
|
||||
'Pemesanan dengan waktu tetap tidak bisa diurutkan ulang',
|
||||
'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.confirmDeleteNoteTitle': 'Hapus catatan?',
|
||||
'dayplan.confirmDeleteNoteBody': 'Catatan ini akan dihapus secara permanen.',
|
||||
'dayplan.cannotDropOnTimed':
|
||||
'Item tidak dapat ditempatkan di antara entri yang terikat waktu',
|
||||
'dayplan.cannotBreakChronology':
|
||||
'Ini akan merusak urutan kronologis item bertanggal dan pemesanan',
|
||||
'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',
|
||||
@@ -29,13 +26,10 @@ const dayplan: TranslationStrings = {
|
||||
'dayplan.optimize': 'Optimalkan',
|
||||
'dayplan.optimized': 'Rute dioptimalkan',
|
||||
'dayplan.routeError': 'Gagal menghitung rute',
|
||||
'dayplan.toast.needTwoPlaces':
|
||||
'Diperlukan minimal dua tempat untuk optimasi rute',
|
||||
'dayplan.toast.needTwoPlaces': 'Diperlukan minimal dua tempat untuk optimasi rute',
|
||||
'dayplan.toast.routeOptimized': 'Rute dioptimalkan',
|
||||
'dayplan.toast.routeOptimizedFromHotel':
|
||||
'Rute dioptimalkan dari akomodasimu',
|
||||
'dayplan.toast.noGeoPlaces':
|
||||
'Tidak ditemukan tempat dengan koordinat untuk kalkulasi rute',
|
||||
'dayplan.toast.routeOptimizedFromHotel': 'Rute dioptimalkan dari akomodasimu',
|
||||
'dayplan.toast.noGeoPlaces': 'Tidak ditemukan tempat dengan koordinat untuk kalkulasi rute',
|
||||
'dayplan.confirmed': 'Dikonfirmasi',
|
||||
'dayplan.pendingRes': 'Menunggu',
|
||||
'dayplan.pdf': 'PDF',
|
||||
|
||||
@@ -2,8 +2,7 @@ import type { NotificationLocale } from '../externalNotifications/types';
|
||||
|
||||
const id: NotificationLocale = {
|
||||
email: {
|
||||
footer:
|
||||
'Anda menerima ini karena Anda telah mengaktifkan notifikasi di TREK.',
|
||||
footer: 'Anda menerima ini karena Anda telah mengaktifkan notifikasi di TREK.',
|
||||
manage: 'Kelola preferensi di Pengaturan',
|
||||
madeWith: 'Dibuat dengan',
|
||||
openTrek: 'Buka TREK',
|
||||
@@ -56,8 +55,7 @@ const id: NotificationLocale = {
|
||||
body: 'Kami menerima permintaan untuk menyetel ulang kata sandi akun TREK Anda. Klik tombol di bawah untuk menetapkan kata sandi baru.',
|
||||
ctaIntro: 'Setel ulang kata sandi',
|
||||
expiry: 'Tautan ini kedaluwarsa dalam 60 menit.',
|
||||
ignore:
|
||||
'Jika Anda tidak meminta ini, Anda dapat mengabaikan email ini — kata sandi Anda tidak akan berubah.',
|
||||
ignore: 'Jika Anda tidak meminta ini, Anda dapat mengabaikan email ini — kata sandi Anda tidak akan berubah.',
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -13,8 +13,7 @@ const files: TranslationStrings = {
|
||||
'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.allowedTypes': 'Gambar, PDF, DOC, DOCX, XLS, XLSX, TXT, CSV · Maks 50 MB',
|
||||
'files.uploading': 'Mengunggah...',
|
||||
'files.filterAll': 'Semua',
|
||||
'files.filterPdf': 'PDFs',
|
||||
@@ -52,10 +51,8 @@ const files: TranslationStrings = {
|
||||
'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.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...',
|
||||
};
|
||||
|
||||
@@ -2,8 +2,7 @@ import type { TranslationStrings } from '../types';
|
||||
|
||||
const journey: TranslationStrings = {
|
||||
'journey.search.placeholder': 'Cari perjalanan…',
|
||||
'journey.search.noResults':
|
||||
'Tidak ada perjalanan yang cocok dengan "{query}"',
|
||||
'journey.search.noResults': 'Tidak ada perjalanan yang cocok dengan "{query}"',
|
||||
'journey.title': 'Journey',
|
||||
'journey.subtitle': 'Lacak perjalananmu saat terjadi',
|
||||
'journey.new': 'Journey Baru',
|
||||
@@ -15,14 +14,12 @@ const journey: TranslationStrings = {
|
||||
'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.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.timelineEmptyHint': 'Tambahkan check-in atau tulis entri jurnal untuk memulai',
|
||||
'journey.status.draft': 'Draf',
|
||||
'journey.status.active': 'Aktif',
|
||||
'journey.status.completed': 'Selesai',
|
||||
@@ -48,30 +45,25 @@ const journey: TranslationStrings = {
|
||||
'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.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.subtitle':
|
||||
'Ubah perjalananmu menjadi kisah yang tak terlupakan',
|
||||
'journey.emptyState.subtitle': 'Check in di suatu tempat atau tulis entri jurnal pertamamu',
|
||||
'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.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.suggestionText': 'Ubah <strong>{title}</strong> menjadi Journey',
|
||||
'journey.frontpage.dismiss': 'Tutup',
|
||||
'journey.frontpage.journeyName': 'Nama Journey',
|
||||
'journey.frontpage.namePlaceholder': 'mis. Asia Tenggara 2026',
|
||||
@@ -86,11 +78,9 @@ const journey: TranslationStrings = {
|
||||
'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.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.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',
|
||||
@@ -111,14 +101,12 @@ const journey: TranslationStrings = {
|
||||
'journey.verdict.couldBeBetter': 'Bisa lebih baik',
|
||||
'journey.synced.places': 'tempat',
|
||||
'journey.synced.synced': 'tersinkron',
|
||||
'journey.editor.discardChangesConfirm':
|
||||
'Anda memiliki perubahan yang belum disimpan. Buang?',
|
||||
'journey.editor.discardChangesConfirm': 'Anda memiliki perubahan yang belum disimpan. Buang?',
|
||||
'journey.editor.uploadFailed': 'Gagal mengunggah foto',
|
||||
'journey.editor.uploadPhotos': 'Unggah foto',
|
||||
'journey.editor.uploading': 'Mengunggah...',
|
||||
'journey.editor.uploadingProgress': 'Mengunggah {done}/{total}…',
|
||||
'journey.editor.uploadPartialFailed':
|
||||
'{failed} dari {total} foto gagal — simpan lagi untuk mencoba ulang',
|
||||
'journey.editor.uploadPartialFailed': '{failed} dari {total} foto gagal — simpan lagi untuk mencoba ulang',
|
||||
'journey.editor.fromGallery': 'Dari Galeri',
|
||||
'journey.editor.allPhotosAdded': 'Semua foto sudah ditambahkan',
|
||||
'journey.editor.writeStory': 'Tulis kisahmu...',
|
||||
@@ -197,12 +185,10 @@ const journey: TranslationStrings = {
|
||||
'journey.settings.reopenJourney': 'Pulihkan Perjalanan',
|
||||
'journey.settings.archived': 'Perjalanan diarsipkan',
|
||||
'journey.settings.reopened': 'Perjalanan dibuka kembali',
|
||||
'journey.settings.endDescription':
|
||||
'Menyembunyikan lencana Langsung. Anda dapat membuka kembali kapan saja.',
|
||||
'journey.settings.endDescription': 'Menyembunyikan lencana Langsung. Anda dapat membuka kembali kapan saja.',
|
||||
'journey.settings.delete': 'Hapus',
|
||||
'journey.settings.deleteJourney': 'Hapus Journey',
|
||||
'journey.settings.deleteMessage':
|
||||
'Hapus "{title}"? Semua entri dan foto akan hilang.',
|
||||
'journey.settings.deleteMessage': 'Hapus "{title}"? Semua entri dan foto akan hilang.',
|
||||
'journey.settings.saved': 'Pengaturan disimpan',
|
||||
'journey.settings.saveFailed': 'Gagal menyimpan',
|
||||
'journey.settings.coverUpdated': 'Sampul diperbarui',
|
||||
@@ -213,8 +199,7 @@ const journey: TranslationStrings = {
|
||||
'journey.photosUploadFailed': 'Beberapa foto gagal diunggah',
|
||||
'journey.photosAdded': '{count} foto ditambahkan',
|
||||
'journey.public.notFound': 'Tidak Ditemukan',
|
||||
'journey.public.notFoundMessage':
|
||||
'Journey ini tidak ada atau tautan telah kedaluwarsa.',
|
||||
'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',
|
||||
|
||||
+13
-26
@@ -3,8 +3,7 @@ import type { TranslationStrings } from '../types';
|
||||
const login: TranslationStrings = {
|
||||
'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.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',
|
||||
@@ -29,8 +28,7 @@ const login: TranslationStrings = {
|
||||
'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.setNewPasswordHint': 'Kamu harus mengganti kata sandi sebelum melanjutkan.',
|
||||
'login.createAccount': 'Buat Akun',
|
||||
'login.createAccountHint': 'Daftarkan akun baru.',
|
||||
'login.creating': 'Membuat…',
|
||||
@@ -39,40 +37,33 @@ const login: TranslationStrings = {
|
||||
'login.register': 'Daftar',
|
||||
'login.emailPlaceholder': 'kamu@email.com',
|
||||
'login.username': 'Nama pengguna',
|
||||
'login.oidc.registrationDisabled':
|
||||
'Pendaftaran dinonaktifkan. Hubungi administrator kamu.',
|
||||
'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.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.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.invalidInviteLink': 'Tautan undangan tidak valid atau sudah kedaluwarsa',
|
||||
'login.oidcFailed': 'Login OIDC gagal',
|
||||
'login.usernameRequired': 'Nama pengguna wajib diisi',
|
||||
'login.passwordMinLength': 'Kata sandi minimal 8 karakter',
|
||||
'login.forgotPassword': 'Lupa kata sandi?',
|
||||
'login.rememberMe': 'Ingat saya',
|
||||
'login.forgotPasswordTitle': 'Setel ulang kata sandi',
|
||||
'login.forgotPasswordBody':
|
||||
'Masukkan alamat email akunmu. Jika akun ada, kami akan mengirim tautan reset.',
|
||||
'login.forgotPasswordBody': 'Masukkan alamat email akunmu. Jika akun ada, kami akan mengirim tautan reset.',
|
||||
'login.forgotPasswordSubmit': 'Kirim tautan',
|
||||
'login.forgotPasswordSentTitle': 'Periksa email kamu',
|
||||
'login.forgotPasswordSentBody':
|
||||
'Jika ada akun dengan email tersebut, tautannya sedang dikirim. Berlaku 60 menit.',
|
||||
'login.forgotPasswordSentBody': 'Jika ada akun dengan email tersebut, tautannya sedang dikirim. Berlaku 60 menit.',
|
||||
'login.forgotPasswordSmtpHintOff':
|
||||
'Catatan: administrator belum mengonfigurasi SMTP, jadi tautan reset akan ditulis ke konsol server alih-alih dikirim lewat email.',
|
||||
'login.backToLogin': 'Kembali ke login',
|
||||
@@ -81,18 +72,14 @@ const login: TranslationStrings = {
|
||||
'login.passwordsDontMatch': 'Kata sandi tidak cocok',
|
||||
'login.mfaCode': 'Kode 2FA',
|
||||
'login.resetPasswordTitle': 'Tetapkan kata sandi baru',
|
||||
'login.resetPasswordBody':
|
||||
'Pilih kata sandi kuat yang belum pernah kamu pakai di sini. Minimal 8 karakter.',
|
||||
'login.resetPasswordMfaBody':
|
||||
'Masukkan kode 2FA atau kode cadangan untuk menyelesaikan reset.',
|
||||
'login.resetPasswordBody': 'Pilih kata sandi kuat yang belum pernah kamu pakai di sini. Minimal 8 karakter.',
|
||||
'login.resetPasswordMfaBody': 'Masukkan kode 2FA atau kode cadangan untuk menyelesaikan reset.',
|
||||
'login.resetPasswordSubmit': 'Setel ulang kata sandi',
|
||||
'login.resetPasswordVerify': 'Verifikasi & setel ulang',
|
||||
'login.resetPasswordSuccessTitle': 'Kata sandi diperbarui',
|
||||
'login.resetPasswordSuccessBody':
|
||||
'Sekarang kamu bisa login dengan kata sandi baru.',
|
||||
'login.resetPasswordSuccessBody': 'Sekarang kamu bisa login dengan kata sandi baru.',
|
||||
'login.resetPasswordInvalidLink': 'Tautan tidak valid',
|
||||
'login.resetPasswordInvalidLinkBody':
|
||||
'Tautan hilang atau rusak. Minta tautan baru untuk melanjutkan.',
|
||||
'login.resetPasswordInvalidLinkBody': 'Tautan hilang atau rusak. Minta tautan baru untuk melanjutkan.',
|
||||
'login.resetPasswordFailed': 'Reset gagal. Tautan mungkin sudah kedaluwarsa.',
|
||||
'login.passkey.signIn': 'Masuk dengan passkey',
|
||||
'login.passkey.failed': 'Masuk dengan passkey gagal. Silakan coba lagi.',
|
||||
|
||||
@@ -9,8 +9,7 @@ const memories: TranslationStrings = {
|
||||
'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.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',
|
||||
@@ -25,8 +24,7 @@ const memories: TranslationStrings = {
|
||||
'memories.providerOTP': 'Kode MFA (jika diaktifkan)',
|
||||
'memories.skipSSLVerification': 'Lewati verifikasi sertifikat SSL',
|
||||
'memories.immichAutoUpload': 'Salin foto journey ke Immich saat diunggah',
|
||||
'memories.providerUrlHintSynology':
|
||||
'Sertakan path aplikasi Photos di URL, mis. https://nas:5001/photo',
|
||||
'memories.providerUrlHintSynology': 'Sertakan path aplikasi Photos di URL, mis. https://nas:5001/photo',
|
||||
'memories.testConnection': 'Uji koneksi',
|
||||
'memories.testShort': 'Uji',
|
||||
'memories.testFirst': 'Uji koneksi terlebih dahulu',
|
||||
@@ -71,10 +69,8 @@ const memories: TranslationStrings = {
|
||||
'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.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',
|
||||
};
|
||||
export default memories;
|
||||
|
||||
@@ -14,8 +14,7 @@ const notif: TranslationStrings = {
|
||||
'notif.todo_due.title': 'Tugas jatuh tempo',
|
||||
'notif.todo_due.text': '{todo} di {trip} jatuh tempo pada {due}',
|
||||
'notif.vacay_invite.title': 'Undangan Vacay Fusion',
|
||||
'notif.vacay_invite.text':
|
||||
'{actor} mengundangmu untuk menggabungkan rencana liburan',
|
||||
'notif.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',
|
||||
@@ -36,7 +35,6 @@ const notif: TranslationStrings = {
|
||||
'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',
|
||||
'notif.dev.unknown_event.text': 'Tipe event "{event}" tidak terdaftar di EVENT_NOTIFICATION_CONFIG',
|
||||
};
|
||||
export default notif;
|
||||
|
||||
@@ -22,16 +22,14 @@ const notifications: TranslationStrings = {
|
||||
'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.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.adminText': '{actor} mengirim notifikasi uji ke semua admin.',
|
||||
'notifications.test.tripTitle': '{actor} memposting di perjalananmu',
|
||||
'notifications.test.tripText': 'Notifikasi uji untuk perjalanan "{trip}".',
|
||||
};
|
||||
|
||||
+32
-64
@@ -15,98 +15,68 @@ const oauth: TranslationStrings = {
|
||||
'oauth.scope.group.weather': 'Cuaca',
|
||||
'oauth.scope.group.journey': 'Journey',
|
||||
'oauth.scope.trips:read.label': 'Lihat perjalanan & itinerari',
|
||||
'oauth.scope.trips:read.description':
|
||||
'Baca perjalanan, hari, catatan harian, dan anggota',
|
||||
'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: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: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.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: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.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: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.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: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.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: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.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: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.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: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.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: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.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: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.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: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.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.geo:read.description': 'Cari lokasi, selesaikan URL peta, dan geokode terbalik koordinat',
|
||||
'oauth.scope.weather:read.label': 'Prakiraan cuaca',
|
||||
'oauth.scope.weather:read.description':
|
||||
'Ambil prakiraan cuaca untuk lokasi dan tanggal perjalanan',
|
||||
'oauth.scope.weather:read.description': 'Ambil prakiraan cuaca untuk lokasi dan tanggal perjalanan',
|
||||
'oauth.scope.journey:read.label': 'Lihat Journey',
|
||||
'oauth.scope.journey:read.description':
|
||||
'Baca Journey, entri, dan daftar kontributor',
|
||||
'oauth.scope.journey:read.description': 'Baca Journey, entri, dan daftar kontributor',
|
||||
'oauth.scope.journey:write.label': 'Kelola Journey',
|
||||
'oauth.scope.journey:write.description':
|
||||
'Buat, perbarui, dan hapus Journey beserta entrinya',
|
||||
'oauth.scope.journey:write.description': 'Buat, perbarui, dan hapus Journey beserta entrinya',
|
||||
'oauth.scope.journey:share.label': 'Kelola tautan Journey',
|
||||
'oauth.scope.journey:share.description':
|
||||
'Buat, perbarui, dan cabut tautan berbagi publik untuk Journey',
|
||||
'oauth.scope.journey:share.description': 'Buat, perbarui, dan cabut tautan berbagi publik untuk Journey',
|
||||
'oauth.authorize.authorizing': 'Authorizing…', // en-fallback
|
||||
'oauth.authorize.loading': 'Loading…', // en-fallback
|
||||
'oauth.authorize.errorTitle': 'Authorization Error', // en-fallback
|
||||
'oauth.authorize.loginTitle': 'Sign in to continue', // en-fallback
|
||||
'oauth.authorize.loginDescription':
|
||||
'{client} wants access to your TREK account. Please sign in first.', // en-fallback
|
||||
'oauth.authorize.loginDescription': '{client} wants access to your TREK account. Please sign in first.', // en-fallback
|
||||
'oauth.authorize.loginButton': 'Sign in to TREK', // en-fallback
|
||||
'oauth.authorize.requestLabel': 'Authorization Request', // en-fallback
|
||||
'oauth.authorize.requestDescription':
|
||||
'This application is requesting access to your TREK account.', // en-fallback
|
||||
'oauth.authorize.trustNote':
|
||||
'Only grant access to applications you trust. Your data stays on your server.', // en-fallback
|
||||
'oauth.authorize.requestDescription': 'This application is requesting access to your TREK account.', // en-fallback
|
||||
'oauth.authorize.trustNote': 'Only grant access to applications you trust. Your data stays on your server.', // en-fallback
|
||||
'oauth.authorize.selectScope': 'Select at least one scope', // en-fallback
|
||||
'oauth.authorize.approveOneScope': 'Approve ({count} scope)', // en-fallback
|
||||
'oauth.authorize.approveManyScopes': 'Approve ({count} scopes)', // en-fallback
|
||||
@@ -115,9 +85,7 @@ const oauth: TranslationStrings = {
|
||||
'oauth.authorize.choosePermissions': 'Choose which permissions to grant', // en-fallback
|
||||
'oauth.authorize.permissionsRequested': 'Permissions requested', // en-fallback
|
||||
'oauth.authorize.alwaysIncluded': 'Always included', // en-fallback
|
||||
'oauth.authorize.alwaysTool.listTrips':
|
||||
'List your trips so the AI can discover trip IDs', // en-fallback
|
||||
'oauth.authorize.alwaysTool.getTripSummary':
|
||||
'Read a trip overview needed to use any other tool', // en-fallback
|
||||
'oauth.authorize.alwaysTool.listTrips': 'List your trips so the AI can discover trip IDs', // en-fallback
|
||||
'oauth.authorize.alwaysTool.getTripSummary': 'Read a trip overview needed to use any other tool', // en-fallback
|
||||
};
|
||||
export default oauth;
|
||||
|
||||
@@ -51,10 +51,8 @@ const packing: TranslationStrings = {
|
||||
'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.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',
|
||||
|
||||
+15
-30
@@ -32,35 +32,20 @@ const perm: TranslationStrings = {
|
||||
'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',
|
||||
'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',
|
||||
};
|
||||
export default perm;
|
||||
|
||||
@@ -4,15 +4,11 @@ const places: TranslationStrings = {
|
||||
'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.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.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',
|
||||
@@ -30,16 +26,13 @@ const places: TranslationStrings = {
|
||||
'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.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.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.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',
|
||||
@@ -76,8 +69,7 @@ const places: TranslationStrings = {
|
||||
'places.formNotes': 'Catatan',
|
||||
'places.formNotesPlaceholder': 'Catatan pribadi...',
|
||||
'places.formReservation': 'Reservasi',
|
||||
'places.reservationNotesPlaceholder':
|
||||
'Catatan reservasi, nomor konfirmasi...',
|
||||
'places.reservationNotesPlaceholder': 'Catatan reservasi, nomor konfirmasi...',
|
||||
'places.mapsSearchPlaceholder': 'Cari tempat...',
|
||||
'places.mapsSearchError': 'Pencarian tempat gagal.',
|
||||
'places.loadingDetails': 'Memuat detail tempat…',
|
||||
|
||||
@@ -48,8 +48,7 @@ const planner: TranslationStrings = {
|
||||
'planner.route': 'Rute',
|
||||
'planner.optimize': 'Optimalkan',
|
||||
'planner.openGoogleMaps': 'Buka di Google Maps',
|
||||
'planner.selectDayHint':
|
||||
'Pilih hari dari daftar kiri untuk melihat rencana hari',
|
||||
'planner.selectDayHint': 'Pilih hari dari daftar kiri untuk melihat rencana hari',
|
||||
'planner.noPlacesForDay': 'Belum ada tempat untuk hari ini',
|
||||
'planner.addPlacesLink': 'Tambah tempat →',
|
||||
'planner.minTotal': 'total min.',
|
||||
|
||||
@@ -3,8 +3,7 @@ import type { TranslationStrings } from '../types';
|
||||
const reservations: TranslationStrings = {
|
||||
'reservations.title': 'Pemesanan',
|
||||
'reservations.empty': 'Belum ada reservasi',
|
||||
'reservations.emptyHint':
|
||||
'Tambahkan reservasi untuk penerbangan, hotel, dan lainnya',
|
||||
'reservations.emptyHint': 'Tambahkan reservasi untuk penerbangan, hotel, dan lainnya',
|
||||
'reservations.add': 'Tambah Reservasi',
|
||||
'reservations.addManual': 'Pemesanan Manual',
|
||||
'reservations.placeHint':
|
||||
@@ -34,8 +33,7 @@ const reservations: TranslationStrings = {
|
||||
'reservations.layover.connection': 'Sambungan',
|
||||
'reservations.layover.layover': 'Transit',
|
||||
'reservations.needsReview': 'Tinjau',
|
||||
'reservations.needsReviewHint':
|
||||
'Bandara tidak dapat dicocokkan otomatis — konfirmasi lokasi.',
|
||||
'reservations.needsReviewHint': 'Bandara tidak dapat dicocokkan otomatis — konfirmasi lokasi.',
|
||||
'reservations.searchLocation': 'Cari stasiun, pelabuhan, alamat...',
|
||||
'reservations.meta.trainNumber': 'No. Kereta',
|
||||
'reservations.meta.platform': 'Peron',
|
||||
@@ -99,8 +97,7 @@ const reservations: TranslationStrings = {
|
||||
'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.budgetHint': 'Entri anggaran akan dibuat otomatis saat menyimpan.',
|
||||
'reservations.departureDate': 'Keberangkatan',
|
||||
'reservations.arrivalDate': 'Kedatangan',
|
||||
'reservations.departureTime': 'Waktu berangkat',
|
||||
@@ -121,59 +118,45 @@ const reservations: TranslationStrings = {
|
||||
'reservations.span.start': 'Mulai',
|
||||
'reservations.span.end': 'Selesai',
|
||||
'reservations.span.ongoing': 'Berlangsung',
|
||||
'reservations.validation.endBeforeStart':
|
||||
'Tanggal/waktu selesai harus setelah tanggal/waktu mulai',
|
||||
'reservations.validation.endBeforeStart': 'Tanggal/waktu selesai harus setelah tanggal/waktu mulai',
|
||||
'reservations.addBooking': 'Tambah pemesanan',
|
||||
'reservations.import.title': 'Impor konfirmasi pemesanan',
|
||||
'reservations.import.cta': 'Impor dari file',
|
||||
'reservations.import.dropHere':
|
||||
'Seret file konfirmasi pemesanan ke sini atau klik untuk memilih',
|
||||
'reservations.import.dropHere': 'Seret file konfirmasi pemesanan ke sini atau klik untuk memilih',
|
||||
'reservations.import.dropActive': 'Lepaskan file untuk mengimpor',
|
||||
'reservations.import.acceptedFormats':
|
||||
'Diterima: EML, PDF, PKPass, HTML, TXT (maks. 10 MB per file, hingga 5 file)',
|
||||
'reservations.import.acceptedFormats': 'Diterima: EML, PDF, PKPass, HTML, TXT (maks. 10 MB per file, hingga 5 file)',
|
||||
'reservations.import.parsing': 'Memproses file…',
|
||||
'reservations.import.previewHeading': '{count} pemesanan ditemukan',
|
||||
'reservations.import.previewEmpty':
|
||||
'Tidak ada pemesanan yang dapat diekstrak dari file yang diunggah.',
|
||||
'reservations.import.previewEmpty': 'Tidak ada pemesanan yang dapat diekstrak dari file yang diunggah.',
|
||||
'reservations.import.removeItem': 'Hapus',
|
||||
'reservations.import.confirm': 'Impor {count} pemesanan',
|
||||
'reservations.import.back': 'Kembali',
|
||||
'reservations.import.success': '{count} pemesanan berhasil diimpor',
|
||||
'reservations.import.partialFailure':
|
||||
'{created} berhasil diimpor, {failed} gagal',
|
||||
'reservations.import.error':
|
||||
'Pemrosesan gagal. Pastikan file adalah konfirmasi pemesanan yang valid.',
|
||||
'reservations.import.unavailable':
|
||||
'Impor pemesanan tidak tersedia di server ini.',
|
||||
'reservations.import.unsupportedFormat':
|
||||
'Format file tidak didukung. Gunakan EML, PDF, PKPass, HTML, atau TXT.',
|
||||
'reservations.import.partialFailure': '{created} berhasil diimpor, {failed} gagal',
|
||||
'reservations.import.error': 'Pemrosesan gagal. Pastikan file adalah konfirmasi pemesanan yang valid.',
|
||||
'reservations.import.unavailable': 'Impor pemesanan tidak tersedia di server ini.',
|
||||
'reservations.import.unsupportedFormat': 'Format file tidak didukung. Gunakan EML, PDF, PKPass, HTML, atau TXT.',
|
||||
'reservations.import.fileTooLarge': 'File "{name}" melebihi batas 10 MB.',
|
||||
'reservations.airtrail.title': 'Impor dari AirTrail',
|
||||
'reservations.airtrail.cta': 'AirTrail',
|
||||
'reservations.airtrail.synced': 'AirTrail',
|
||||
'reservations.airtrail.syncedHint':
|
||||
'Tersinkron dari AirTrail — perubahan tetap sinkron di kedua arah.',
|
||||
'reservations.airtrail.syncedHint': 'Tersinkron dari AirTrail — perubahan tetap sinkron di kedua arah.',
|
||||
'reservations.airtrail.notSynced': 'Tidak tersinkron',
|
||||
'reservations.airtrail.notSyncedHint':
|
||||
'Penerbangan ini telah dihapus di AirTrail dan tidak lagi tersinkron.',
|
||||
'reservations.airtrail.loadError':
|
||||
'Tidak dapat memuat penerbangan AirTrail-mu.',
|
||||
'reservations.airtrail.notSyncedHint': 'Penerbangan ini telah dihapus di AirTrail dan tidak lagi tersinkron.',
|
||||
'reservations.airtrail.loadError': 'Tidak dapat memuat penerbangan AirTrail-mu.',
|
||||
'reservations.airtrail.imported': '{count} penerbangan diimpor',
|
||||
'reservations.airtrail.skippedDuplicate':
|
||||
'{count} sudah ada di perjalanan ini, dilewati',
|
||||
'reservations.airtrail.skippedDuplicate': '{count} sudah ada di perjalanan ini, dilewati',
|
||||
'reservations.airtrail.nothingImported': 'Tidak ada yang dapat diimpor.',
|
||||
'reservations.airtrail.importError': 'Impor gagal. Silakan coba lagi.',
|
||||
'reservations.airtrail.undo': 'Impor dari AirTrail',
|
||||
'reservations.airtrail.alreadyImported': 'Diimpor',
|
||||
'reservations.airtrail.duringTrip': 'Selama perjalanan ini',
|
||||
'reservations.airtrail.otherFlights': 'Penerbangan lain',
|
||||
'reservations.airtrail.empty':
|
||||
'Tidak ada penerbangan ditemukan di akun AirTrail-mu.',
|
||||
'reservations.airtrail.empty': 'Tidak ada penerbangan ditemukan di akun AirTrail-mu.',
|
||||
'reservations.airtrail.importCta': 'Impor {count}',
|
||||
'reservations.costsLabel': 'Costs',
|
||||
'reservations.createExpense': 'Create expense',
|
||||
'reservations.createExpenseHint':
|
||||
'Saves the booking, then opens the Costs editor.',
|
||||
'reservations.createExpenseHint': 'Saves the booking, then opens the Costs editor.',
|
||||
'reservations.linkedExpense': 'Linked expense',
|
||||
'reservations.removeExpense': 'Remove expense',
|
||||
};
|
||||
|
||||
@@ -14,12 +14,10 @@ const settings: TranslationStrings = {
|
||||
'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.mapTemplatePlaceholder': 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||||
'settings.mapHint': 'Template URL untuk tile peta',
|
||||
'settings.mapProvider': 'Penyedia peta',
|
||||
'settings.mapProviderHint':
|
||||
'Berlaku untuk peta Trip Planner dan Journey. Atlas selalu menggunakan Leaflet.',
|
||||
'settings.mapProviderHint': 'Berlaku untuk peta Trip Planner dan Journey. Atlas selalu menggunakan Leaflet.',
|
||||
'settings.mapLeafletSubtitle': 'Klasik 2D, tile raster apa pun',
|
||||
'settings.mapMapboxSubtitle': 'Tile vektor, bangunan 3D & medan',
|
||||
'settings.mapExperimental': 'Eksperimental',
|
||||
@@ -30,13 +28,11 @@ const settings: TranslationStrings = {
|
||||
'settings.mapStylePlaceholder': 'Pilih gaya Mapbox',
|
||||
'settings.mapStyleHint': 'Preset atau URL mapbox://styles/USER/ID milikmu',
|
||||
'settings.map3dBuildings': 'Bangunan 3D & medan',
|
||||
'settings.map3dHint':
|
||||
'Kemiringan + ekstrusi bangunan 3D nyata — bekerja di semua gaya, termasuk satelit.',
|
||||
'settings.map3dHint': 'Kemiringan + ekstrusi bangunan 3D nyata — bekerja di semua gaya, termasuk satelit.',
|
||||
'settings.mapHighQuality': 'Mode kualitas tinggi',
|
||||
'settings.mapHighQualityHint':
|
||||
'Antialiasing + proyeksi globe untuk tepi yang lebih tajam dan tampilan dunia realistis.',
|
||||
'settings.mapHighQualityWarning':
|
||||
'Dapat memengaruhi performa pada perangkat kelas bawah.',
|
||||
'settings.mapHighQualityWarning': 'Dapat memengaruhi performa pada perangkat kelas bawah.',
|
||||
'settings.mapTipLabel': 'Tip:',
|
||||
'settings.mapTip':
|
||||
'Klik kanan dan seret untuk memutar/memiringkan peta. Klik tengah untuk menambah tempat (klik kanan untuk rotasi).',
|
||||
@@ -45,11 +41,9 @@ const settings: TranslationStrings = {
|
||||
'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.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.weatherKeyHint': 'Untuk data cuaca. Gratis di openweathermap.org/api',
|
||||
'settings.keyPlaceholder': 'Masukkan key...',
|
||||
'settings.configured': 'Sudah dikonfigurasi',
|
||||
'settings.saveKeys': 'Simpan Keys',
|
||||
@@ -84,8 +78,7 @@ const settings: TranslationStrings = {
|
||||
'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.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',
|
||||
@@ -97,8 +90,7 @@ const settings: TranslationStrings = {
|
||||
'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.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',
|
||||
@@ -107,8 +99,7 @@ const settings: TranslationStrings = {
|
||||
'settings.notificationsDisabled':
|
||||
'Notifikasi belum dikonfigurasi. Minta admin untuk mengaktifkan notifikasi email atau webhook.',
|
||||
'settings.notificationsActive': 'Saluran aktif',
|
||||
'settings.notificationsManagedByAdmin':
|
||||
'Acara notifikasi dikonfigurasi oleh administrator.',
|
||||
'settings.notificationsManagedByAdmin': 'Acara notifikasi dikonfigurasi oleh administrator.',
|
||||
'settings.on': 'Aktif',
|
||||
'settings.off': 'Nonaktif',
|
||||
'settings.mcp.title': 'Konfigurasi MCP',
|
||||
@@ -122,8 +113,7 @@ const settings: TranslationStrings = {
|
||||
'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.noTokens': 'Belum ada token. Buat satu untuk menghubungkan MCP client.',
|
||||
'settings.mcp.tokenCreatedAt': 'Dibuat',
|
||||
'settings.mcp.tokenUsedAt': 'Digunakan',
|
||||
'settings.mcp.deleteTokenTitle': 'Hapus Token',
|
||||
@@ -131,8 +121,7 @@ const settings: TranslationStrings = {
|
||||
'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.tokenNamePlaceholder': 'mis. Claude Desktop, Laptop kerja',
|
||||
'settings.mcp.modal.creating': 'Membuat…',
|
||||
'settings.mcp.modal.create': 'Buat Token',
|
||||
'settings.mcp.modal.createdTitle': 'Token Dibuat',
|
||||
@@ -168,16 +157,13 @@ const settings: TranslationStrings = {
|
||||
'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.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.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.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',
|
||||
@@ -217,15 +203,13 @@ const settings: TranslationStrings = {
|
||||
'settings.about.supporters.tierEmpty': 'Jadilah yang pertama',
|
||||
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
|
||||
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
|
||||
'settings.about.supporter.tier.businessClassDreamer':
|
||||
'Business Class Dreamer',
|
||||
'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer',
|
||||
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
|
||||
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
|
||||
'settings.about.description':
|
||||
'TREK adalah perencana perjalanan self-hosted yang membantu kamu mengatur perjalanan dari ide pertama hingga kenangan terakhir. Perencanaan harian, anggaran, daftar bawaan, foto dan masih banyak lagi — semua di satu tempat, di servermu sendiri.',
|
||||
'settings.about.madeWith': 'Dibuat dengan',
|
||||
'settings.about.madeBy':
|
||||
'oleh Maurice dan komunitas open-source yang terus berkembang.',
|
||||
'settings.about.madeBy': 'oleh Maurice dan komunitas open-source yang terus berkembang.',
|
||||
'settings.username': 'Nama pengguna',
|
||||
'settings.email': 'Email',
|
||||
'settings.role': 'Peran',
|
||||
@@ -237,12 +221,10 @@ const settings: TranslationStrings = {
|
||||
'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.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.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.',
|
||||
@@ -273,8 +255,7 @@ const settings: TranslationStrings = {
|
||||
'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.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',
|
||||
@@ -282,24 +263,21 @@ const settings: TranslationStrings = {
|
||||
'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.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.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',
|
||||
'settings.bookingLabels': 'Label rute pemesanan',
|
||||
'settings.bookingLabelsHint':
|
||||
'Menampilkan nama stasiun / bandara di peta. Jika mati, hanya ikon ditampilkan.',
|
||||
"settings.currency": "Currency",
|
||||
"settings.currencyHint": "All amounts in Costs are converted to and shown in this currency.",
|
||||
'settings.bookingLabelsHint': 'Menampilkan nama stasiun / bandara di peta. Jika mati, hanya ikon ditampilkan.',
|
||||
'settings.currency': 'Currency',
|
||||
'settings.currencyHint': 'All amounts in Costs are converted to and shown in this currency.',
|
||||
'settings.passkey.title': 'Passkey',
|
||||
'settings.passkey.description':
|
||||
'Masuk lebih cepat dan tahan terhadap phishing dengan passkey — sidik jari, wajah, PIN, atau kunci keamanan fisik kamu. Kata sandimu tetap tersedia sebagai cadangan.',
|
||||
@@ -307,8 +285,7 @@ const settings: TranslationStrings = {
|
||||
'Passkey diaktifkan tetapi belum sepenuhnya dikonfigurasi di server ini. Minta administratormu untuk mengatur domain WebAuthn.',
|
||||
'settings.passkey.add': 'Tambah passkey',
|
||||
'settings.passkey.addTitle': 'Tambah passkey',
|
||||
'settings.passkey.passwordPrompt':
|
||||
'Konfirmasi kata sandimu saat ini, lalu ikuti petunjuk di perangkatmu.',
|
||||
'settings.passkey.passwordPrompt': 'Konfirmasi kata sandimu saat ini, lalu ikuti petunjuk di perangkatmu.',
|
||||
'settings.passkey.passwordRequired': 'Kata sandimu saat ini wajib diisi.',
|
||||
'settings.passkey.namePlaceholder': 'Nama (opsional, mis. "iPhone")',
|
||||
'settings.passkey.addedToast': 'Passkey ditambahkan',
|
||||
@@ -316,8 +293,7 @@ const settings: TranslationStrings = {
|
||||
'settings.passkey.addError': 'Gagal menambahkan passkey',
|
||||
'settings.passkey.cancelled': 'Penyiapan passkey dibatalkan',
|
||||
'settings.passkey.deleted': 'Passkey dihapus',
|
||||
'settings.passkey.deleteConfirm':
|
||||
'Hapus passkey ini? Konfirmasi dengan kata sandimu.',
|
||||
'settings.passkey.deleteConfirm': 'Hapus passkey ini? Konfirmasi dengan kata sandimu.',
|
||||
'settings.passkey.rename': 'Ganti nama',
|
||||
'settings.passkey.defaultName': 'Passkey',
|
||||
'settings.passkey.synced': 'Tersinkron',
|
||||
@@ -325,9 +301,11 @@ const settings: TranslationStrings = {
|
||||
'settings.passkey.lastUsed': 'Terakhir digunakan',
|
||||
'settings.passkey.neverUsed': 'Belum pernah digunakan',
|
||||
'settings.mapPoiPill': 'Jelajahi tempat di peta',
|
||||
'settings.mapPoiPillHint': 'Tampilkan pil kategori di peta perjalanan untuk menemukan restoran, hotel, dan lainnya di sekitar dari OpenStreetMap.',
|
||||
'settings.mapPoiPillHint':
|
||||
'Tampilkan pil kategori di peta perjalanan untuk menemukan restoran, hotel, dan lainnya di sekitar dari OpenStreetMap.',
|
||||
'settings.airtrail.title': 'AirTrail',
|
||||
'settings.airtrail.hint': 'Hubungkan AirTrail yang kamu host sendiri untuk mengimpor dan menyinkronkan penerbangan. Buat kunci API di AirTrail pada Pengaturan → Keamanan.',
|
||||
'settings.airtrail.hint':
|
||||
'Hubungkan AirTrail yang kamu host sendiri untuk mengimpor dan menyinkronkan penerbangan. Buat kunci API di AirTrail pada Pengaturan → Keamanan.',
|
||||
'settings.airtrail.url': 'URL Instans',
|
||||
'settings.airtrail.apiKey': 'Kunci API',
|
||||
'settings.airtrail.apiKeyPlaceholder': 'Kunci API Bearer',
|
||||
@@ -335,7 +313,8 @@ const settings: TranslationStrings = {
|
||||
'settings.airtrail.allowInsecureTls': 'Izinkan sertifikat yang ditandatangani sendiri',
|
||||
'settings.airtrail.allowInsecureTlsHint': 'Aktifkan hanya untuk instans tepercaya di jaringanmu sendiri.',
|
||||
'settings.airtrail.writeBack': 'Tulis perubahan kembali ke AirTrail',
|
||||
'settings.airtrail.writeBackHint': 'Nonaktif secara bawaan: AirTrail adalah sumber kebenaran dan TREK hanya membaca darinya. Aktifkan untuk mengirim perubahan yang dibuat di TREK kembali ke AirTrail.',
|
||||
'settings.airtrail.writeBackHint':
|
||||
'Nonaktif secara bawaan: AirTrail adalah sumber kebenaran dan TREK hanya membaca darinya. Aktifkan untuk mengirim perubahan yang dibuat di TREK kembali ke AirTrail.',
|
||||
'settings.airtrail.connected': 'Terhubung',
|
||||
'settings.airtrail.notConnected': 'Tidak terhubung',
|
||||
'settings.airtrail.toast.saved': 'Koneksi AirTrail disimpan',
|
||||
|
||||
@@ -5,12 +5,9 @@ const system_notice: TranslationStrings = {
|
||||
'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.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.',
|
||||
@@ -27,34 +24,26 @@ const system_notice: TranslationStrings = {
|
||||
'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_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_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_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_oauth': 'OAuth 2.1 direkomendasikan (mcp-remote)',
|
||||
'system_notice.v3_mcp.highlight_scopes': '24 cakupan izin yang terperinci',
|
||||
'system_notice.v3_mcp.highlight_deprecated': 'Token statis trek_ sudah usang',
|
||||
'system_notice.v3_mcp.highlight_tools': 'Perangkat dan prompt yang diperluas',
|
||||
'system_notice.v3_thankyou.title': 'Catatan pribadi dari saya',
|
||||
'system_notice.v3_thankyou.body':
|
||||
'Sebelum kamu lanjut — saya ingin berhenti sejenak.\n\nTREK dimulai sebagai proyek sampingan yang saya buat untuk perjalanan saya sendiri. Saya tidak pernah membayangkan ia akan tumbuh menjadi sesuatu yang dipercaya oleh 4.000 dari kalian untuk merencanakan petualangan. Setiap bintang, setiap issue, setiap permintaan fitur — saya membaca semuanya, dan itulah yang membuat saya terus bertahan di malam-malam larut antara pekerjaan penuh waktu dan kuliah.\n\nSaya ingin kalian tahu: TREK akan selalu open source, selalu self-hosted, selalu milik kalian. Tanpa pelacakan, tanpa langganan, tanpa syarat tersembunyi. Hanya sebuah alat yang dibuat oleh seseorang yang mencintai traveling sama seperti kalian.\n\nTerima kasih khusus untuk [jubnl](https://github.com/jubnl) — kamu telah menjadi kolaborator yang luar biasa. Begitu banyak hal yang membuat versi 3.0 hebat memiliki jejakmu. Terima kasih telah percaya pada proyek ini ketika masih kasar.\n\nDan untuk setiap dari kalian yang melaporkan bug, menerjemahkan string, membagikan TREK kepada teman, atau sekadar menggunakannya untuk merencanakan perjalanan — **terima kasih**. Kalianlah alasan semua ini ada.\n\nUntuk lebih banyak petualangan bersama.\n\n— Maurice\n\n---\n\n[Bergabunglah dengan komunitas di Discord](https://discord.gg/7Q6M6jDwzf)\n\nJika TREK membuat perjalananmu lebih baik, [secangkir kopi kecil](https://ko-fi.com/mauriceboe) selalu membantu menjaga lampu tetap menyala.',
|
||||
'system_notice.v3014_whitespace_collision.title':
|
||||
'Tindakan diperlukan: konflik akun pengguna',
|
||||
'system_notice.v3014_whitespace_collision.title': 'Tindakan diperlukan: konflik akun pengguna',
|
||||
'system_notice.v3014_whitespace_collision.body':
|
||||
'Pembaruan 3.0.14 mendeteksi satu atau lebih konflik nama pengguna atau email yang disebabkan oleh spasi di awal atau akhir nilai yang tersimpan. Akun yang terpengaruh telah diganti nama secara otomatis. Periksa log server untuk baris yang dimulai dengan **[migration] WHITESPACE COLLISION** guna mengidentifikasi akun mana yang perlu ditinjau.',
|
||||
};
|
||||
|
||||
@@ -9,7 +9,7 @@ const trip: TranslationStrings = {
|
||||
'trip.tabs.packingShort': 'Perlengkapan',
|
||||
'trip.tabs.lists': 'Daftar',
|
||||
'trip.tabs.listsShort': 'Daftar',
|
||||
'trip.tabs.budget': "Costs",
|
||||
'trip.tabs.budget': 'Costs',
|
||||
'trip.tabs.files': 'File',
|
||||
'trip.loading': 'Memuat perjalanan...',
|
||||
'trip.loadingPhotos': 'Memuat foto tempat...',
|
||||
|
||||
@@ -11,7 +11,6 @@ const trips: TranslationStrings = {
|
||||
'trips.reminderDays': 'hari',
|
||||
'trips.reminderCustom': 'Kustom',
|
||||
'trips.reminderDaysBefore': 'hari sebelum keberangkatan',
|
||||
'trips.reminderDisabledHint':
|
||||
'Pengingat perjalanan dinonaktifkan. Aktifkan di Admin > Pengaturan > Notifikasi.',
|
||||
'trips.reminderDisabledHint': 'Pengingat perjalanan dinonaktifkan. Aktifkan di Admin > Pengaturan > Notifikasi.',
|
||||
};
|
||||
export default trips;
|
||||
|
||||
+13
-26
@@ -8,8 +8,7 @@ const vacay: TranslationStrings = {
|
||||
'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.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',
|
||||
@@ -17,8 +16,7 @@ const vacay: TranslationStrings = {
|
||||
'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.removePersonHint': 'Semua entri cuti untuk orang ini akan dihapus secara permanen.',
|
||||
'vacay.personName': 'Nama',
|
||||
'vacay.personNamePlaceholder': 'Masukkan nama',
|
||||
'vacay.color': 'Warna',
|
||||
@@ -53,16 +51,12 @@ const vacay: TranslationStrings = {
|
||||
'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.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.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.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',
|
||||
@@ -70,8 +64,7 @@ const vacay: TranslationStrings = {
|
||||
'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.dissolveHint': 'Pisahkan kalender kembali. Entri kamu akan tetap disimpan.',
|
||||
'vacay.dissolveAction': 'Pisahkan',
|
||||
'vacay.dissolved': 'Kalender dipisahkan',
|
||||
'vacay.fusedWith': 'Digabung dengan',
|
||||
@@ -79,8 +72,7 @@ const vacay: TranslationStrings = {
|
||||
'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.inviteHint': 'Undang pengguna TREK lain untuk berbagi kalender cuti bersama.',
|
||||
'vacay.selectUser': 'Pilih pengguna',
|
||||
'vacay.sendInvite': 'Kirim Undangan',
|
||||
'vacay.inviteSent': 'Undangan terkirim',
|
||||
@@ -92,15 +84,10 @@ const vacay: TranslationStrings = {
|
||||
'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.',
|
||||
'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.',
|
||||
};
|
||||
export default vacay;
|
||||
|
||||
Reference in New Issue
Block a user