mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-22 06:56:35 +00:00
77162aa8d5
The switch a road tripper keeps asking for has never worked. OSRM's `exclude` is the only
avoidance TREK has, and the two public hosts it ships with answer it HTTP 400 on every
leg: their car profile is built without excludable classes, and their own Lua says why
("no memory for classes on demo server"). So "drive this without the tolls" produced
nothing at all on a default install, and the fallback inside the alternatives bar quietly
gave up after one refusal per host.
FOSSGIS runs a public Valhalla on the whole planet next to that OSRM, keyless, and there
avoidance is a runtime weighting rather than a profile that has to be rebuilt. This adds
it as a second engine asked only the questions the first cannot answer, and puts three
switches under the road trip settings that change the road itself rather than offering an
alternative beside it. Paris to Lyon measured 465.8 km / 297 min with tolls against
492.0 km / 454 min without; Hamburg to Copenhagen comes back ferry-free at 469.8 km,
which OSRM cannot produce at all — where a ferry IS the crossing it answers NoRoute
rather than driving round.
Four things the docs would have got wrong, all measured against the live instance:
- `format=osrm` does not carry `has_toll`. That flag is the entire reason for doing this,
and it exists only in the native answer — which is also 5.7x smaller, because the OSRM
shape drags every intersection along. So the adapter translates instead of borrowing a
familiar envelope.
- Without a `radius` Valhalla refuses a point it cannot bind to a road, where OSRM still
snaps one. Vienna's Stephansdom, in a pedestrian zone, answers error 442 until a search
radius is allowed. TREK is full of such places, so every location carries one.
- Ten locations is a hard cap and a road trip day is bundled into one request. A day over
it is split into runs overlapping by one point, which is exact rather than approximate:
a measured six-stop day came back within two metres and under a second of the same day
asked whole.
- Its drive times run 5.4 % above OSRM's over ten European legs and 36 % above on one, and
those times feed the arrival clocks of a day. So a day is answered by one engine or by
neither, never by both, and a piece that will not answer loses the whole day rather than
half of it — the schedule chains leg times blindly and would otherwise print a complete,
plausible, silently wrong timetable.
Because the weighting can fail, the honest surface is the answer rather than the request.
`use_tolls: 0` still returns a tolled road where there is no untolled crossing, so what
the road actually turned out to be is read back per leg, and a day that could not avoid
what it was asked to avoid says so on its own header instead of wearing a label the road
disproves. The switches disable themselves, with a reason, on an instance pointed at its
own OSRM: that operator chose against public hosts, and a second one they never asked for
would undo the choice.
Two things that would have broken quietly and did not:
- The route cache keys on `profile:unit:coords` and is shared with the day planner, the
studio and the booking geometry. Without the avoidance in the key, flipping a switch
returns the old road out of cache in under a millisecond — and worse, an avoiding answer
stored under the plain key hands those other callers a road nobody drives.
- `snapped` is OSRM-only and carries the dashed kerb-to-door spur from #2273. Valhalla
echoes the coordinates it was given and never says where it bound them, but the ends of
a leg's line are exactly those points: measured against Füssen, its first vertex matches
OSRM's snapped location to the digit.
The alternatives bar gets the same engine, which finally makes its "no motorway" and "no
tolls" offers appear on a default install, plus a ferry-free one. `sameRoad` now compares
geometry rather than numbers there, because two engines' distances for the same road sit
kilometres apart and the old 200 m tolerance called that a discovery.
Desktop only, like the whole road trip mode: nothing under client/src/mobile renders it.
577 lines
36 KiB
TypeScript
577 lines
36 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
|
|
|
const settings: TranslationStrings = {
|
|
'settings.title': 'Pengaturan',
|
|
'settings.subtitle': 'Atur pengaturan pribadimu',
|
|
'settings.tabs.display': 'Tampilan',
|
|
'settings.tabs.map': 'Peta',
|
|
'settings.tabs.notifications': 'Notifikasi',
|
|
'settings.tabs.integrations': 'Integrasi',
|
|
'settings.plugins.oauth.connected': 'Terhubung',
|
|
'settings.plugins.oauth.notConnected': 'Tidak terhubung',
|
|
'settings.plugins.oauth.connect': 'Hubungkan',
|
|
'settings.plugins.oauth.disconnect': 'Putuskan',
|
|
'settings.tabs.plugins': 'Plugin',
|
|
'settings.plugins.title': 'Pengaturan plugin',
|
|
'settings.plugins.subtitle': 'Pengaturan pribadimu untuk plugin yang kamu gunakan (kunci API, preferensi).',
|
|
'settings.plugins.empty': 'Tidak ada plugin yang aktif.',
|
|
'settings.plugins.saved': 'Pengaturan disimpan',
|
|
'settings.plugins.requiredMissing': '"{field}" wajib diisi',
|
|
'settings.tabs.account': 'Akun',
|
|
'settings.tabs.offline': 'Offline',
|
|
'settings.tabs.about': 'Tentang',
|
|
'settings.map': 'Peta',
|
|
'settings.mapTemplate': 'Template Peta',
|
|
'settings.mapTemplatePlaceholder.select': 'Pilih template...',
|
|
'settings.mapDefaultHint': 'Kosongkan untuk OpenStreetMap (default)',
|
|
'settings.routingBase': 'Mesin rute sendiri',
|
|
'settings.routingBaseHint': 'Instans OSRM milik sendiri. Kosong berarti server publik, yang mengizinkan sekitar satu permintaan per detik — cukup untuk sehari, mepet untuk perjalanan darat. Berlaku setelah server dimulai ulang.',
|
|
'settings.valhallaBase': 'Instans Valhalla sendiri',
|
|
'settings.valhallaBaseHint': 'Instans Valhalla sendiri. Ia ditanya ketika satu ruas harus menghindari tol, jalan bebas hambatan, atau feri — server OSRM publik tidak bisa menjawabnya. Kosong memakai Valhalla publik dari FOSSGIS, kecuali di atas sudah diisi mesin rute sendiri; maka tidak ada mesin kedua yang ditanya. Berlaku setelah server dijalankan ulang.',
|
|
'settings.mapHint': 'Template URL untuk tile peta',
|
|
'settings.mapProvider': 'Penyedia peta',
|
|
'settings.mapProviderHint': 'Berlaku untuk peta Trip Planner dan Journey. Atlas selalu menggunakan Leaflet.',
|
|
'settings.mapLeafletSubtitle': 'Klasik 2D, tile raster apa pun',
|
|
'settings.mapMapboxSubtitle': 'Tile vektor, bangunan 3D & medan',
|
|
'settings.mapMapLibreSubtitle': 'Tile vektor OpenFreeMap, tanpa token',
|
|
'settings.mapExperimental': 'Eksperimental',
|
|
'settings.mapMapboxToken': 'Token akses Mapbox',
|
|
'settings.mapMapboxTokenHint': 'Token publik (pk.*) dari',
|
|
'settings.mapMapboxTokenLink': 'mapbox.com → Token akses',
|
|
'settings.mapCartoKey': 'Kunci API CARTO',
|
|
'settings.mapCartoKeyHint': 'Peta dasar CARTO menampilkan tanda air tanpa kunci. Gratis, tanpa akun, dari',
|
|
'settings.mapCartoKeyLink': 'kunci API peta dasar carto.com',
|
|
'settings.mapCartoKeyMissing':
|
|
'Templat ini adalah peta dasar CARTO. Tanpa kunci, CARTO mencetak "API KEY REQUIRED" di setiap ubin. Sampai kunci dimasukkan, TREK menampilkan peta dasar bawaan.',
|
|
'settings.mapStyle': 'Gaya peta',
|
|
'settings.mapStylePlaceholder': 'Pilih gaya Mapbox',
|
|
'settings.mapStyleHint': 'Preset atau URL mapbox://styles/USER/ID milikmu',
|
|
'settings.mapOpenFreeMapStylePlaceholder': 'Pilih gaya OpenFreeMap',
|
|
'settings.mapOpenFreeMapStyleHint': 'Preset atau URL gaya OpenFreeMap. Gaya OpenFreeMap berfungsi tanpa token.',
|
|
'settings.map3dBuildings': 'Bangunan 3D & medan',
|
|
'settings.map3dHint': 'Kemiringan + ekstrusi bangunan 3D nyata — bekerja di semua gaya, termasuk satelit.',
|
|
'settings.mapHighQuality': 'Mode kualitas tinggi',
|
|
'settings.mapHighQualityHint':
|
|
'Antialiasing + proyeksi globe untuk tepi yang lebih tajam dan tampilan dunia realistis.',
|
|
'settings.mapHighQualityWarning': 'Dapat memengaruhi performa pada perangkat kelas bawah.',
|
|
'settings.mapTipLabel': 'Tip:',
|
|
'settings.mapTip':
|
|
'Klik kanan dan seret untuk memutar/memiringkan peta. Klik tengah untuk menambah tempat (klik kanan untuk rotasi).',
|
|
'settings.saveMap': 'Simpan Peta',
|
|
'settings.apiKeys': 'API Keys',
|
|
'settings.mapsKey': 'Google Maps API Key',
|
|
'settings.mapsKeyHint': 'Untuk pencarian tempat. Memerlukan Places API (New). Dapatkan di console.cloud.google.com',
|
|
'settings.weatherKey': 'OpenWeatherMap API Key',
|
|
'settings.weatherKeyHint': 'Untuk data cuaca. Gratis di openweathermap.org/api',
|
|
'settings.keyPlaceholder': 'Masukkan key...',
|
|
'settings.configured': 'Sudah dikonfigurasi',
|
|
'settings.saveKeys': 'Simpan Keys',
|
|
'settings.display': 'Tampilan',
|
|
'settings.colorMode': 'Mode Warna',
|
|
'settings.light': 'Terang',
|
|
'settings.dark': 'Gelap',
|
|
'settings.auto': 'Otomatis',
|
|
'settings.language': 'Bahasa',
|
|
'settings.temperature': 'Satuan Suhu',
|
|
'settings.distance': 'Satuan Jarak',
|
|
'settings.timeFormat': 'Format Waktu',
|
|
'settings.blurBookingCodes': 'Sembunyikan Kode Pemesanan',
|
|
'settings.aiAlwaysRetry': 'Always retry booking imports with AI',
|
|
'settings.aiAlwaysRetryHint': 'When a file cannot be read by the standard parser, automatically retry it with AI.',
|
|
'settings.optimizeFromAccommodation': 'Optimalkan rute dari akomodasi',
|
|
'settings.optimizeFromAccommodationHint':
|
|
'Saat mengoptimalkan suatu hari, mulai rute dari hotel tempatmu bangun pagi dan akhiri di hotel tempatmu check-in malam itu.',
|
|
'settings.notifications': 'Notifikasi',
|
|
'settings.notifyTripInvite': 'Undangan perjalanan',
|
|
'settings.notifyBookingChange': 'Perubahan pemesanan',
|
|
'settings.notifyTripReminder': 'Pengingat perjalanan',
|
|
'settings.notifyTodoDue': 'Tugas jatuh tempo',
|
|
'settings.notifyVacayInvite': 'Undangan Vacay fusion',
|
|
'settings.notifyVacayShare': 'Berbagi kalender Vacay',
|
|
'settings.notifyCollectionInvite': 'Undangan koleksi',
|
|
'settings.notifySynologySessionCleared': 'Sesi Synology dihapus',
|
|
'settings.notifyPluginNotification': 'Notifikasi plugin',
|
|
'settings.notifyPhotosShared': 'Foto dibagikan (Immich)',
|
|
'settings.notifyCollabMessage': 'Pesan chat (Collab)',
|
|
'settings.notifyPackingTagged': 'Daftar bawaan: penugasan',
|
|
'settings.notifyWebhook': 'Notifikasi webhook',
|
|
'settings.notifyVersionAvailable': 'Versi baru tersedia',
|
|
'settings.notifyReplicaFailure': 'Kegagalan replika penyimpanan',
|
|
'settings.notificationPreferences.email': 'Email',
|
|
'settings.notificationPreferences.webhook': 'Webhook',
|
|
'settings.notificationPreferences.inapp': 'In-App',
|
|
'settings.notificationPreferences.notConfigured': 'Belum dikonfigurasi — atur di pengaturan plugin',
|
|
'settings.plugins.actions': 'Tindakan',
|
|
'settings.plugins.actions.confirm': 'Jalankan tindakan ini?',
|
|
'settings.notificationPreferences.sendTest': 'Kirim tes',
|
|
'settings.notificationPreferences.configure': 'Konfigurasi',
|
|
'settings.notificationPreferences.testSuccess': 'Notifikasi tes terkirim.',
|
|
'settings.notificationPreferences.testFailed': 'Tes gagal.',
|
|
'settings.notificationPreferences.pluginConfigured': 'Sudah diatur. Kelola kredensial di halaman pengaturan plugin.',
|
|
'settings.notificationPreferences.ntfy': 'Ntfy',
|
|
'settings.notificationPreferences.noChannels':
|
|
'Belum ada saluran notifikasi yang dikonfigurasi. Minta admin untuk mengatur notifikasi email atau webhook.',
|
|
'settings.webhookUrl.label': 'Webhook URL',
|
|
'settings.webhookUrl.placeholder': 'https://discord.com/api/webhooks/...',
|
|
'settings.webhookUrl.hint': 'Masukkan URL webhook Discord, Slack, atau kustom untuk menerima notifikasi.',
|
|
'settings.webhookUrl.saved': 'Webhook URL tersimpan',
|
|
'settings.webhookUrl.test': 'Uji',
|
|
'settings.webhookUrl.testSuccess': 'Test webhook berhasil dikirim',
|
|
'settings.webhookUrl.testFailed': 'Test webhook gagal',
|
|
'settings.ntfyUrl.topicLabel': 'Topik Ntfy',
|
|
'settings.ntfyUrl.topicPlaceholder': 'my-trek-alerts',
|
|
'settings.ntfyUrl.serverLabel': 'URL Server Ntfy (opsional)',
|
|
'settings.ntfyUrl.serverPlaceholder': 'https://ntfy.sh',
|
|
'settings.ntfyUrl.hint':
|
|
'Masukkan topik Ntfy Anda untuk menerima notifikasi push. Kosongkan bidang server untuk menggunakan default yang dikonfigurasi oleh admin Anda.',
|
|
'settings.ntfyUrl.tokenLabel': 'Token Akses (opsional)',
|
|
'settings.ntfyUrl.tokenHint': 'Diperlukan untuk topik yang dilindungi kata sandi.',
|
|
'settings.ntfyUrl.saved': 'Pengaturan Ntfy tersimpan',
|
|
'settings.ntfyUrl.test': 'Uji',
|
|
'settings.ntfyUrl.testSuccess': 'Notifikasi uji Ntfy berhasil dikirim',
|
|
'settings.ntfyUrl.testFailed': 'Notifikasi uji Ntfy gagal',
|
|
'settings.ntfyUrl.tokenCleared': 'Token akses dihapus',
|
|
'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.on': 'Aktif',
|
|
'settings.off': 'Nonaktif',
|
|
'settings.mcp.title': 'Konfigurasi MCP',
|
|
'settings.mcp.endpoint': 'MCP Endpoint',
|
|
'settings.mcp.clientConfig': 'Konfigurasi Client',
|
|
'settings.mcp.clientConfigHint':
|
|
'Ganti <your_token> dengan API token dari daftar di bawah. Path ke npx mungkin perlu disesuaikan untuk sistemmu (mis. C:\\PROGRA~1\\nodejs\\npx.cmd di Windows).',
|
|
'settings.mcp.clientConfigHintOAuth':
|
|
'Ganti <your_client_id> dan <your_client_secret> dengan kredensial dari klien OAuth 2.1 yang kamu buat di atas. mcp-remote akan membuka browser untuk menyelesaikan otorisasi pertama kali kamu terhubung. Path ke npx mungkin perlu disesuaikan untuk sistemmu (misalnya C:\\PROGRA~1\\nodejs\\npx.cmd di Windows).',
|
|
'settings.mcp.copy': 'Salin',
|
|
'settings.mcp.copied': 'Disalin!',
|
|
'settings.mcp.apiTokens': 'API Tokens',
|
|
'settings.mcp.createToken': 'Buat Token Baru',
|
|
'settings.mcp.noTokens': 'Belum ada token. Buat satu untuk menghubungkan MCP client.',
|
|
'settings.mcp.tokenCreatedAt': 'Dibuat',
|
|
'settings.mcp.tokenUsedAt': 'Digunakan',
|
|
'settings.mcp.deleteTokenTitle': 'Hapus Token',
|
|
'settings.mcp.deleteTokenMessage':
|
|
'Token ini akan langsung berhenti bekerja. MCP client yang menggunakannya akan kehilangan akses.',
|
|
'settings.mcp.modal.createTitle': 'Buat API Token',
|
|
'settings.mcp.modal.tokenName': 'Nama Token',
|
|
'settings.mcp.modal.tokenNamePlaceholder': 'mis. Claude Desktop, Laptop kerja',
|
|
'settings.mcp.modal.creating': 'Membuat…',
|
|
'settings.mcp.modal.create': 'Buat Token',
|
|
'settings.mcp.modal.createdTitle': 'Token Dibuat',
|
|
'settings.mcp.modal.createdWarning':
|
|
'Token ini hanya ditampilkan sekali. Salin dan simpan sekarang — tidak bisa dipulihkan.',
|
|
'settings.mcp.modal.done': 'Selesai',
|
|
'settings.mcp.toast.created': 'Token dibuat',
|
|
'settings.mcp.toast.createError': 'Gagal membuat token',
|
|
'settings.mcp.toast.deleted': 'Token dihapus',
|
|
'settings.mcp.toast.deleteError': 'Gagal menghapus token',
|
|
'settings.mcp.apiTokensDeprecated':
|
|
'API Token sudah tidak digunakan dan akan dihapus di rilis mendatang. Gunakan OAuth 2.1 Client sebagai gantinya.',
|
|
'settings.oauth.clients': 'Klien OAuth 2.1',
|
|
'settings.oauth.clientsHint':
|
|
'Daftarkan klien OAuth 2.1 agar aplikasi MCP pihak ketiga (Claude Web, Cursor, dll.) dapat terhubung tanpa token statis.',
|
|
'settings.oauth.createClient': 'Klien Baru',
|
|
'settings.oauth.noClients': 'Belum ada klien OAuth yang terdaftar.',
|
|
'settings.oauth.clientId': 'ID Klien',
|
|
'settings.oauth.clientSecret': 'Rahasia Klien',
|
|
'settings.oauth.deleteClient': 'Hapus Klien',
|
|
'settings.oauth.deleteClientMessage':
|
|
'Klien ini dan semua sesi aktif akan dihapus permanen. Aplikasi yang menggunakannya akan langsung kehilangan akses.',
|
|
'settings.oauth.rotateSecret': 'Putar Ulang Secret',
|
|
'settings.oauth.rotateSecretMessage':
|
|
'Secret klien baru akan dibuat dan semua sesi yang ada langsung dibatalkan. Perbarui aplikasimu sebelum menutup dialog ini.',
|
|
'settings.oauth.rotateSecretConfirm': 'Putar Ulang',
|
|
'settings.oauth.rotateSecretConfirming': 'Memutar ulang…',
|
|
'settings.oauth.rotateSecretDoneTitle': 'Secret Baru Dibuat',
|
|
'settings.oauth.rotateSecretDoneWarning':
|
|
'Secret ini hanya ditampilkan sekali. Salin sekarang dan perbarui aplikasimu — semua sesi sebelumnya telah dibatalkan.',
|
|
'settings.oauth.activeSessions': 'Sesi OAuth Aktif',
|
|
'settings.oauth.sessionScopes': 'Cakupan',
|
|
'settings.oauth.sessionExpires': 'Kedaluwarsa',
|
|
'settings.oauth.revoke': 'Cabut',
|
|
'settings.oauth.revokeSession': 'Cabut Sesi',
|
|
'settings.oauth.revokeSessionMessage': 'Ini akan segera mencabut akses untuk sesi OAuth ini.',
|
|
'settings.oauth.modal.createTitle': 'Daftarkan OAuth Client',
|
|
'settings.oauth.modal.presets': 'Preset cepat',
|
|
'settings.oauth.modal.clientName': 'Nama Aplikasi',
|
|
'settings.oauth.modal.clientNamePlaceholder': 'mis. Claude Web, Aplikasi MCP Saya',
|
|
'settings.oauth.modal.redirectUris': 'Redirect URI',
|
|
'settings.oauth.modal.redirectUrisPlaceholder': 'https://aplikasiku.com/callback\nhttps://aplikasiku.com/auth',
|
|
'settings.oauth.modal.redirectUrisHint':
|
|
'Satu URI per baris. HTTPS, HTTP loopback, atau skema aplikasi pribadi (myapp://). Kecocokan tepat, kecuali port pada URI loopback.',
|
|
'settings.oauth.modal.scopes': 'Cakupan yang Diizinkan',
|
|
'settings.oauth.modal.scopesHint':
|
|
'list_trips dan get_trip_summary selalu tersedia — tidak perlu cakupan. Keduanya memungkinkan AI menemukan ID perjalanan yang diperlukan untuk menggunakan alat lainnya.',
|
|
'settings.oauth.modal.selectAll': 'Pilih semua',
|
|
'settings.oauth.modal.deselectAll': 'Batalkan semua',
|
|
'settings.oauth.modal.creating': 'Mendaftarkan…',
|
|
'settings.oauth.modal.create': 'Daftarkan Client',
|
|
'settings.oauth.modal.createdTitle': 'Client Terdaftar',
|
|
'settings.oauth.modal.createdWarning':
|
|
'Client secret hanya ditampilkan sekali. Salin sekarang — tidak dapat dipulihkan.',
|
|
'settings.oauth.toast.createError': 'Gagal mendaftarkan klien OAuth',
|
|
'settings.oauth.toast.deleted': 'Klien OAuth dihapus',
|
|
'settings.oauth.toast.deleteError': 'Gagal menghapus klien OAuth',
|
|
'settings.oauth.toast.revoked': 'Sesi dicabut',
|
|
'settings.oauth.toast.revokeError': 'Gagal mencabut sesi',
|
|
'settings.oauth.toast.rotateError': 'Gagal memutar ulang client secret',
|
|
'settings.oauth.modal.machineClient': 'Klien mesin (tanpa login browser)',
|
|
'settings.oauth.modal.machineClientHint':
|
|
'Menggunakan grant client_credentials — tidak perlu URI pengalihan. Token diterbitkan langsung melalui client_id + client_secret dan bertindak sebagai Anda dalam cakupan yang dipilih.',
|
|
'settings.oauth.modal.machineClientUsage':
|
|
'Dapatkan token: POST /oauth/token dengan grant_type=client_credentials, client_id, dan client_secret. Tanpa browser, tanpa refresh token.',
|
|
'settings.oauth.badge.machine': 'mesin',
|
|
'settings.account': 'Akun',
|
|
'settings.about': 'Tentang',
|
|
'settings.about.reportBug': 'Laporkan Bug',
|
|
'settings.about.reportBugHint': 'Menemukan masalah? Beri tahu kami',
|
|
'settings.about.featureRequest': 'Permintaan Fitur',
|
|
'settings.about.featureRequestHint': 'Sarankan fitur baru',
|
|
'settings.about.wikiHint': 'Dokumentasi & panduan',
|
|
'settings.about.descriptionManaged':
|
|
'TREK helps you organize your trips from the first idea to the last memory. Day planning, budget, packing lists, photos and much more — all in one place.',
|
|
'settings.about.sourceTitle': 'Source code',
|
|
'settings.about.sourceHint': 'TREK is open source, licensed AGPL-3.0',
|
|
'settings.about.supporters.badge': 'Pendukung Bulanan',
|
|
'settings.about.supporters.title': 'Rekan perjalanan untuk TREK',
|
|
'settings.about.supporters.subtitle':
|
|
'Saat kamu merencanakan rute berikutnya, orang-orang ini ikut merencanakan masa depan TREK. Kontribusi bulanan mereka langsung masuk ke pengembangan dan jam kerja nyata — supaya TREK tetap Open Source.',
|
|
'settings.about.supporters.since': 'pendukung sejak {date}',
|
|
'settings.about.supporters.tierEmpty': 'Jadilah yang pertama',
|
|
'settings.about.supporter.tier.noReturnTicket': 'No Return Ticket',
|
|
'settings.about.supporter.tier.lostLuggageVip': 'Lost Luggage VIP',
|
|
'settings.about.supporter.tier.businessClassDreamer': 'Business Class Dreamer',
|
|
'settings.about.supporter.tier.budgetTraveller': 'Budget Traveller',
|
|
'settings.about.supporter.tier.hostelBunkmate': 'Hostel Bunkmate',
|
|
'settings.about.description':
|
|
'TREK adalah perencana perjalanan self-hosted yang membantu kamu mengatur perjalanan dari ide pertama hingga kenangan terakhir. Perencanaan harian, anggaran, daftar bawaan, foto dan masih banyak lagi — semua di satu tempat, di servermu sendiri.',
|
|
'settings.about.madeWith': 'Dibuat dengan',
|
|
'settings.about.madeBy': 'oleh Maurice dan komunitas open-source yang terus berkembang.',
|
|
'settings.username': 'Nama pengguna',
|
|
'settings.email': 'Email',
|
|
'settings.role': 'Peran',
|
|
'settings.roleAdmin': 'Administrator',
|
|
'settings.oidcLinked': 'Terhubung dengan',
|
|
'settings.changePassword': 'Ganti Kata Sandi',
|
|
'settings.currentPassword': 'Kata sandi saat ini',
|
|
'settings.currentPasswordRequired': 'Kata sandi saat ini wajib diisi',
|
|
'settings.newPassword': 'Kata sandi baru',
|
|
'settings.confirmPassword': 'Konfirmasi kata sandi baru',
|
|
'settings.updatePassword': 'Perbarui kata sandi',
|
|
'settings.passwordRequired': 'Masukkan kata sandi saat ini dan kata sandi baru',
|
|
'settings.passwordTooShort': 'Kata sandi minimal 8 karakter',
|
|
'settings.passwordMismatch': 'Kata sandi tidak cocok',
|
|
'settings.passwordWeak': 'Kata sandi harus mengandung huruf besar, huruf kecil, angka, dan karakter khusus',
|
|
'settings.passwordChanged': 'Kata sandi berhasil diubah',
|
|
'settings.mustChangePassword':
|
|
'Kamu harus mengubah kata sandi sebelum melanjutkan. Atur kata sandi baru di bawah ini.',
|
|
'settings.deleteAccount': 'Hapus akun',
|
|
'settings.deleteAccountTitle': 'Hapus akunmu?',
|
|
'settings.deleteAccountWarning':
|
|
'Akunmu beserta semua perjalanan, tempat, dan file akan dihapus permanen. Tindakan ini tidak bisa dibatalkan.',
|
|
'settings.deleteAccountConfirm': 'Hapus permanen',
|
|
'settings.deleteBlockedTitle': 'Penghapusan tidak memungkinkan',
|
|
'settings.deleteBlockedMessage':
|
|
'Kamu satu-satunya administrator. Promosikan pengguna lain menjadi admin sebelum menghapus akunmu.',
|
|
'settings.roleUser': 'Pengguna',
|
|
'settings.saveProfile': 'Simpan Profil',
|
|
'settings.toast.mapSaved': 'Pengaturan peta tersimpan',
|
|
'settings.toast.keysSaved': 'API keys tersimpan',
|
|
'settings.toast.displaySaved': 'Pengaturan tampilan tersimpan',
|
|
'settings.toast.profileSaved': 'Profil tersimpan',
|
|
'settings.uploadAvatar': 'Unggah Foto Profil',
|
|
'settings.removeAvatar': 'Hapus Foto Profil',
|
|
'settings.avatarUploaded': 'Foto profil diperbarui',
|
|
'settings.avatarRemoved': 'Foto profil dihapus',
|
|
'settings.avatarError': 'Gagal mengunggah',
|
|
'settings.avatarRemoveError': 'Gagal menghapus',
|
|
'settings.mfa.title': 'Autentikasi dua faktor (2FA)',
|
|
'settings.mfa.description':
|
|
'Menambahkan langkah kedua saat masuk dengan email dan kata sandi. Gunakan aplikasi autentikator (Google Authenticator, Authy, dll.).',
|
|
'settings.mfa.requiredByPolicy':
|
|
'Administrator mengharuskan autentikasi dua faktor. Atur aplikasi autentikator di bawah ini sebelum melanjutkan.',
|
|
'settings.mfa.backupTitle': 'Kode cadangan',
|
|
'settings.mfa.backupDescription':
|
|
'Gunakan kode cadangan sekali pakai ini jika kamu kehilangan akses ke aplikasi autentikator.',
|
|
'settings.mfa.backupWarning': 'Simpan kode ini sekarang. Setiap kode hanya bisa digunakan sekali.',
|
|
'settings.mfa.backupCopy': 'Salin kode',
|
|
'settings.mfa.backupDownload': 'Unduh TXT',
|
|
'settings.mfa.backupPrint': 'Cetak / PDF',
|
|
'settings.mfa.backupCopied': 'Kode cadangan disalin',
|
|
'settings.mfa.enabled': '2FA aktif di akunmu.',
|
|
'settings.mfa.disabled': '2FA belum diaktifkan.',
|
|
'settings.mfa.setup': 'Atur autentikator',
|
|
'settings.mfa.scanQr': 'Pindai kode QR ini dengan aplikasimu, atau masukkan secret secara manual.',
|
|
'settings.mfa.secretLabel': 'Kunci secret (entri manual)',
|
|
'settings.mfa.codePlaceholder': 'Kode 6 digit',
|
|
'settings.mfa.enable': 'Aktifkan 2FA',
|
|
'settings.mfa.cancelSetup': 'Batal',
|
|
'settings.mfa.disableTitle': 'Nonaktifkan 2FA',
|
|
'settings.mfa.disableHint': 'Masukkan kata sandi akun dan kode terkini dari aplikasi autentikatormu.',
|
|
'settings.mfa.disable': 'Nonaktifkan 2FA',
|
|
'settings.mfa.toastEnabled': 'Autentikasi dua faktor diaktifkan',
|
|
'settings.mfa.toastDisabled': 'Autentikasi dua faktor dinonaktifkan',
|
|
'settings.mfa.demoBlocked': 'Tidak tersedia dalam mode demo',
|
|
'settings.bookingLabels': 'Label rute pemesanan',
|
|
'settings.bookingLabelsHint': 'Menampilkan nama stasiun / bandara di peta. Jika mati, hanya ikon ditampilkan.',
|
|
'settings.currency': 'Mata uang tampilan',
|
|
'settings.currencyHint':
|
|
'Jumlah di Biaya ditampilkan dalam mata uang ini hanya untuk tampilan — jumlah aslinya tidak berubah.',
|
|
'settings.currencyTrip': 'Mata uang perjalanan',
|
|
'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.',
|
|
'settings.passkey.notConfigured':
|
|
'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.passwordRequired': 'Kata sandimu saat ini wajib diisi.',
|
|
'settings.passkey.namePlaceholder': 'Nama (opsional, mis. "iPhone")',
|
|
'settings.passkey.addedToast': 'Passkey ditambahkan',
|
|
'settings.passkey.added': 'Ditambahkan',
|
|
'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.rename': 'Ganti nama',
|
|
'settings.passkey.defaultName': 'Passkey',
|
|
'settings.passkey.synced': 'Tersinkron',
|
|
'settings.passkey.deviceBound': 'Perangkat ini',
|
|
'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.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.url': 'URL Instans',
|
|
'settings.airtrail.apiKey': 'Kunci API',
|
|
'settings.airtrail.apiKeyPlaceholder': 'Kunci API Bearer',
|
|
'settings.airtrail.apiKeyHint': 'Dibuat di AirTrail pada Pengaturan → Keamanan. Disimpan terenkripsi.',
|
|
'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.connected': 'Terhubung',
|
|
'settings.airtrail.notConnected': 'Tidak terhubung',
|
|
'settings.airtrail.toast.saved': 'Koneksi AirTrail disimpan',
|
|
'settings.airtrail.toast.saveError': 'Tidak dapat menyimpan koneksi',
|
|
'settings.airtrail.test.button': 'Uji koneksi',
|
|
'settings.airtrail.test.success': 'Terhubung — {count} penerbangan ditemukan',
|
|
'settings.airtrail.test.failed': 'Koneksi gagal',
|
|
'settings.aiParsing.title': 'Penguraian AI',
|
|
'settings.aiParsing.hint':
|
|
'Pilih model AI yang dipakai untuk mengekstrak pemesanan dari file yang diunggah. Ini hanya berlaku jika administrator belum mengonfigurasi model untuk seluruh instance.',
|
|
'settings.aiParsing.provider': 'Penyedia',
|
|
'settings.aiParsing.providerLocal': 'Lokal (Ollama)',
|
|
'settings.aiParsing.providerOpenai': 'OpenAI',
|
|
'settings.aiParsing.providerAnthropic': 'Anthropic',
|
|
'settings.aiParsing.localAdminOnly':
|
|
'Endpoint lokal (Ollama) diatur sekali untuk seluruh instansi di pengaturan administrator. Kamu tetap bisa memakai kunci OpenAI atau Anthropic milikmu sendiri di sini.',
|
|
'settings.aiParsing.model': 'Model',
|
|
'settings.aiParsing.baseUrl': 'URL Dasar',
|
|
'settings.aiParsing.baseUrlHint':
|
|
'Tempat model berjalan — server Ollama lokal atau endpoint yang kompatibel dengan OpenAI.',
|
|
'settings.aiParsing.apiKey': 'Kunci API',
|
|
'settings.aiParsing.apiKeyHint': 'Disimpan secara terenkripsi. Biarkan kosong untuk mempertahankan kunci saat ini.',
|
|
'settings.aiParsing.multimodal': 'Kirim dokumen sebagai gambar',
|
|
'settings.aiParsing.multimodalHint':
|
|
'Untuk model yang mendukung visi — mengirim PDF asli alih-alih teks yang diekstrak.',
|
|
'settings.aiParsing.toast.saved': 'Pengaturan AI disimpan',
|
|
'settings.aiParsing.toast.saveError': 'Tidak dapat menyimpan pengaturan AI',
|
|
'settings.tabs.appearance': 'Appearance',
|
|
'settings.appearance.theme': 'Theme',
|
|
'settings.appearance.scheme': 'Color scheme',
|
|
'settings.appearance.scheme.default': 'Default',
|
|
'settings.appearance.scheme.highContrast': 'High contrast',
|
|
'settings.appearance.scheme.indigo': 'Indigo',
|
|
'settings.appearance.scheme.teal': 'Teal',
|
|
'settings.appearance.scheme.rose': 'Rose',
|
|
'settings.appearance.scheme.amber': 'Amber',
|
|
'settings.appearance.scheme.violet': 'Violet',
|
|
'settings.appearance.scheme.custom': 'Custom',
|
|
'settings.appearance.customAccent': 'Custom accent',
|
|
'settings.appearance.contrastOk': 'Good contrast',
|
|
'settings.appearance.contrastLow': 'Low contrast',
|
|
'settings.appearance.readability': 'Readability',
|
|
'settings.appearance.transparency': 'Transparency',
|
|
'settings.appearance.transparencyHint':
|
|
'Glassy translucent surfaces. Turn off for solid, higher-contrast backgrounds.',
|
|
'settings.appearance.reduceMotion': 'Reduce motion',
|
|
'settings.appearance.reduceMotionHint': 'Minimize animations and transitions.',
|
|
'settings.appearance.density': 'Density',
|
|
'settings.appearance.comfortable': 'Comfortable',
|
|
'settings.appearance.compact': 'Compact',
|
|
'settings.appearance.textSize': 'Text size',
|
|
'settings.appearance.advancedTextSizes': 'Advanced text sizes',
|
|
'settings.appearance.hideAdvanced': 'Hide advanced',
|
|
'settings.appearance.tier.title': 'Titles',
|
|
'settings.appearance.tier.subtitle': 'Subtitles',
|
|
'settings.appearance.tier.body': 'Body',
|
|
'settings.appearance.tier.caption': 'Captions',
|
|
'settings.appearance.dashboardWidgets': 'Dashboard widgets',
|
|
'settings.appearance.dashboardWidgetsHint': 'Show or hide dashboard widgets independently on desktop and mobile.',
|
|
'settings.appearance.desktop': 'Desktop',
|
|
'settings.appearance.mobile': 'Mobile',
|
|
'settings.appearance.widget.sidebar': 'Right sidebar',
|
|
'settings.appearance.widget.currency': 'Currency',
|
|
'settings.appearance.widget.collections': 'Koleksi',
|
|
'settings.appearance.widget.timezones': 'Timezones',
|
|
'settings.appearance.widget.upcomingReservations': 'Upcoming reservations',
|
|
'settings.appearance.widget.atlas': 'Atlas / countries',
|
|
'settings.appearance.widget.tripsTotal': 'Trips total',
|
|
'settings.appearance.widget.daysTraveled': 'Days traveled',
|
|
'settings.appearance.widget.distanceFlown': 'Distance flown',
|
|
'settings.appearance.reset': 'Reset to defaults',
|
|
'settings.appearance.group.belowHero': 'Below the hero',
|
|
'settings.appearance.group.bottomOfPage': 'Bottom of page',
|
|
'settings.appearance.sidebarHint': 'The whole right column. Turn off and the dashboard centers.',
|
|
'settings.appearance.densityHint':
|
|
'Compact tightens spacing and padding for a denser layout that fits more on screen.',
|
|
'settings.appearance.textSizeAll': 'Everything',
|
|
'settings.appearance.perSize': 'Adjust each size separately',
|
|
'settings.appearance.size.large': 'Large',
|
|
'settings.appearance.size.medium': 'Medium',
|
|
'settings.appearance.size.normal': 'Normal',
|
|
'settings.appearance.size.small': 'Small',
|
|
'settings.appearance.preview.large': 'Large heading',
|
|
'settings.appearance.preview.medium': 'Medium subtitle',
|
|
'settings.appearance.preview.normal': 'Normal body text',
|
|
'settings.appearance.preview.small': 'Small caption / address',
|
|
'settings.appearance.example.large': 'Headings, big numbers',
|
|
'settings.appearance.example.medium': 'Sub-headings',
|
|
'settings.appearance.example.normal': 'Place names, descriptions',
|
|
'settings.appearance.example.small': 'Addresses, labels',
|
|
'settings.appearance.experimental': 'Experimental',
|
|
'settings.appearance.mobileNav': 'Bilah navigasi bawah',
|
|
'settings.appearance.mobileNav.hint':
|
|
'Pilih item yang tampil di bilah dan yang masuk ke “Lainnya”. Dasbor selalu tetap di urutan pertama.',
|
|
'settings.appearance.mobileNav.inBar': 'Di bilah',
|
|
'settings.appearance.mobileNav.underMore': 'Di bawah “Lainnya”',
|
|
'settings.appearance.mobileNav.moreEmpty': 'Belum ada apa pun di sini — semuanya muat di bilah.',
|
|
'settings.appearance.mobileNav.pinned': 'Disematkan',
|
|
'settings.appearance.mobileNav.toMore': 'Pindahkan ke “Lainnya”',
|
|
'settings.appearance.mobileNav.toBar': 'Pindahkan ke bilah',
|
|
'settings.appearance.dashOrder': 'Urutan dasbor',
|
|
'settings.appearance.dashOrder.hint':
|
|
'Atur ulang susunan daftar perjalanan dan widget di dasbor ponsel Anda. Perjalanan unggulan selalu berada di atas.',
|
|
'settings.appearance.dashOrder.trips': 'Perjalanan',
|
|
'settings.appearance.dashOrder.hidden': 'Tersembunyi',
|
|
'settings.general.languageRegion': 'Language & region',
|
|
'settings.general.travelMap': 'Travel & map',
|
|
'settings.general.startup': 'Mulai',
|
|
'settings.startPage': 'Halaman awal',
|
|
'settings.startPageDashboard': 'Dasbor',
|
|
'settings.startPageActiveTrip': 'Perjalanan aktif',
|
|
'settings.startPageHint':
|
|
'TREK langsung membuka perjalanan yang sedang berlangsung, atau yang paling dekat akan dimulai. Perjalanan yang sama yang disorot dasbor.',
|
|
'settings.startTripTab': 'Tab awal',
|
|
'settings.startTripTabHint':
|
|
'Tab yang dibuka bersama perjalanan. Jika tab itu milik addon yang dimatikan, tampilan rencana yang dibuka.',
|
|
|
|
// ── Offline (#1135)
|
|
'settings.offline.cache.title': 'Cache offline',
|
|
'settings.offline.mode.title': 'Mode offline',
|
|
'settings.offline.mode.force': 'Paksa mode offline',
|
|
'settings.offline.mode.forceHint':
|
|
'Bekerja hanya dari data cache dan antrekan perubahanmu. Matikan untuk terhubung kembali dan menyinkronkan.',
|
|
'settings.offline.mode.active':
|
|
'Mode offline aktif — perubahanmu diantrekan dan akan disinkronkan saat kamu mematikannya.',
|
|
'settings.offline.prepare.title': 'Persiapkan untuk offline',
|
|
'settings.offline.prepare.hint':
|
|
'Unduh semua yang kamu perlukan — data perjalanan, dokumen, dan tile peta — sebelum kehilangan koneksi.',
|
|
'settings.offline.prepare.button': 'Unduh untuk penggunaan offline',
|
|
'settings.offline.prepare.running': 'Mengunduh…',
|
|
'settings.offline.prepare.done': 'Siap untuk penggunaan offline',
|
|
'settings.offline.prepare.phase.trips': 'Data perjalanan',
|
|
'settings.offline.prepare.phase.files': 'Dokumen',
|
|
'settings.offline.prepare.phase.tiles': 'Tile peta',
|
|
'settings.offline.resync': 'Sinkronkan ulang sekarang',
|
|
'settings.offline.resyncing': 'Menyinkronkan…',
|
|
'settings.offline.storage.title': 'Apa yang disimpan offline',
|
|
'settings.offline.storage.tiles': 'Simpan tile peta offline',
|
|
'settings.offline.storage.tilesHint':
|
|
'Tile peta menggunakan penyimpanan paling banyak. Matikan ini untuk hanya menyimpan data perjalanan dan dokumen secara offline.',
|
|
'settings.offline.storage.tripsTitle': 'Perjalanan',
|
|
'settings.offline.storage.tripOn': 'Disimpan offline',
|
|
'settings.offline.storage.tripOff': 'Tidak disimpan',
|
|
'settings.offline.storage.tripFinished': 'Selesai. Hanya disimpan jika kamu mengaktifkannya.',
|
|
'settings.offline.notice.stored': '{count} perjalanan tersimpan di perangkat ini',
|
|
'settings.offline.notice.nothing': 'Tidak ada yang perlu disimpan. Aktifkan perjalanan yang ingin kamu simpan.',
|
|
'settings.offline.notice.busy': 'Sinkronisasi sedang berjalan. Coba lagi sebentar.',
|
|
'settings.offline.notice.offline': 'Tidak ada koneksi. Hubungkan untuk menyimpan perjalanan secara offline.',
|
|
'settings.offline.notice.signedOut': 'Sesimu telah berakhir. Masuk lagi untuk menyinkronkan.',
|
|
'settings.offline.notice.failed': 'Unduhan tidak dapat diselesaikan. Periksa koneksimu dan coba lagi.',
|
|
'settings.offline.notice.loadFailed': 'Tidak dapat membaca penyimpanan offline perangkat ini. Membersihkan cache biasanya memperbaikinya.',
|
|
'settings.offline.clear': 'Hapus cache',
|
|
'settings.offline.clearConfirm':
|
|
'Hapus semua data perjalanan offline? Kamu bisa menyinkronkan ulang kapan saja saat online.',
|
|
'settings.offline.stats.trips': 'Perjalanan di cache',
|
|
'settings.offline.stats.pending': 'Perubahan tertunda',
|
|
'settings.offline.stats.failed': 'Perubahan gagal',
|
|
'settings.offline.stats.conflicts': 'Konflik',
|
|
'settings.offline.empty': 'Belum ada perjalanan di cache. Sambungkan ke internet untuk menyinkronkan.',
|
|
'settings.offline.loading': 'Memuat…',
|
|
'settings.offline.conflicts.title': 'Konflik sinkronisasi',
|
|
'settings.offline.conflicts.hint':
|
|
'Perubahan yang kamu buat secara offline bentrok dengan perubahan yang lebih baru di server. Pilih versi mana yang ingin disimpan.',
|
|
'settings.offline.conflicts.keepMine': 'Simpan punyaku',
|
|
'settings.offline.conflicts.keepServer': 'Simpan punya server',
|
|
'settings.offline.conflicts.mine': 'Versimu',
|
|
'settings.offline.conflicts.server': 'Versi server',
|
|
'settings.offline.conflicts.item': 'Perubahan pada “{name}”',
|
|
'settings.offline.conflicts.strategyTitle': 'Saat terjadi konflik',
|
|
'settings.offline.conflicts.strategy.ask': 'Tanya aku setiap kali',
|
|
'settings.offline.conflicts.strategy.mine': 'Selalu simpan versiku',
|
|
'settings.offline.conflicts.strategy.server': 'Selalu simpan versi server',
|
|
'settings.offline.banner.offline': 'Offline',
|
|
'settings.offline.banner.forced': 'Mode offline',
|
|
'settings.offline.banner.queued': 'Offline · {count} diantrekan',
|
|
'settings.offline.banner.syncing': 'Menyinkronkan {count}…',
|
|
'settings.offline.banner.failed': 'Gagal menyinkronkan: {count}',
|
|
'settings.offline.banner.conflicts': 'Konflik: {count}',
|
|
'settings.pluginActivity.title': 'Aktivitas plugin',
|
|
'settings.pluginActivity.description': 'Setiap tindakan yang dilakukan plugin atas nama Anda, terbaru lebih dulu.',
|
|
'settings.pluginActivity.empty': 'Belum ada aktivitas plugin.',
|
|
'settings.pluginActivity.refresh': 'Segarkan',
|
|
'settings.pluginActivity.columns.plugin': 'Plugin',
|
|
'settings.pluginActivity.columns.action': 'Tindakan',
|
|
'settings.pluginActivity.columns.resource': 'Sumber daya',
|
|
'settings.pluginActivity.columns.when': 'Waktu',
|
|
'settings.pluginActivity.columns.status': 'Hasil',
|
|
'settings.alwaysShowRoutes': 'Selalu tampilkan rute pemesanan',
|
|
'settings.alwaysShowRoutesHint':
|
|
'Menampilkan rute setiap penerbangan, kereta, dan pemesanan lainnya di peta secara otomatis, tanpa perlu mengaktifkannya satu per satu.',
|
|
|
|
// Public API keys (Settings -> Integrations)
|
|
'settings.apiKeys.title': 'Kunci API',
|
|
'settings.apiKeys.description': 'Kunci untuk API publik, agar perangkat lunak lain dapat membaca perjalananmu. Hanya baca: kunci tidak dapat mengubah atau menghapus apa pun.',
|
|
'settings.apiKeys.create': 'Buat kunci',
|
|
'settings.apiKeys.empty': 'Belum ada kunci. Buat satu untuk menghubungkan perangkat lunak lain.',
|
|
'settings.apiKeys.createdAt': 'dibuat',
|
|
'settings.apiKeys.usedAt': 'terakhir dipakai',
|
|
'settings.apiKeys.deleteTitle': 'Hapus kunci',
|
|
'settings.apiKeys.deleteMessage': 'Semua yang memakai kunci ini langsung berhenti bekerja. Tindakan ini tidak bisa dibatalkan.',
|
|
'settings.apiKeys.deleted': 'Kunci dihapus',
|
|
'settings.apiKeys.deleteFailed': 'Kunci tidak dapat dihapus',
|
|
'settings.apiKeys.createFailed': 'Kunci tidak dapat dibuat',
|
|
'settings.apiKeys.copy': 'Salin',
|
|
'settings.apiKeys.docsHint': 'Kirim kunci sebagai "Authorization: Bearer ..." atau "X-API-Key: ..." ke /api/v1.',
|
|
'settings.apiKeys.modal.createTitle': 'Buat kunci API',
|
|
'settings.apiKeys.modal.name': 'Nama',
|
|
'settings.apiKeys.modal.namePlaceholder': 'mis. Dawarich',
|
|
'settings.apiKeys.modal.nameHint': 'Hanya untukmu, agar kamu mengenali kunci ini nanti.',
|
|
'settings.apiKeys.modal.creating': 'Membuat...',
|
|
'settings.apiKeys.modal.create': 'Buat',
|
|
'settings.apiKeys.modal.createdTitle': 'Kunci API dibuat',
|
|
'settings.apiKeys.modal.createdWarning': 'Salin kunci sekarang. Kunci hanya ditampilkan sekali dan tidak bisa diambil lagi.',
|
|
'settings.apiKeys.modal.done': 'Selesai',
|
|
};
|
|
|
|
export default settings;
|