* feat: Add Jan API server Swagger UI - Serve OpenAPI spec (`static/openapi.json`) directly from the proxy server. - Implement Swagger UI assets (`swagger-ui.css`, `swagger-ui-bundle.js`, `favicon.ico`) and a simple HTML wrapper under `/docs`. - Extend the proxy whitelist to include Swagger UI routes. - Add routing logic for `/openapi.json`, `/docs`, and Swagger UI static files. - Update whitelisted paths and integrate CORS handling for the new endpoints. * feat: serve Swagger UI at root path The Swagger UI endpoint previously lived under `/docs`. The route handling and exclusion list have been updated so the UI is now served directly at `/`. This simplifies access, aligns with the expected root URL in the Tauri frontend, and removes the now‑unused `/docs` path handling. * feat: add model loading state and translations for local API server Implemented a loading indicator for model startup, updated the start/stop button to reflect model loading and server starting states, and disabled interactions while pending. Added new translation keys (`loadingModel`, `startingServer`) across all supported locales (en, de, id, pl, vn, zh-CN, zh-TW) and integrated them into the UI. Included a small delay after model start to ensure backend state consistency. This improves user feedback and prevents race conditions during server initialization.
267 lines
12 KiB
JSON
267 lines
12 KiB
JSON
{
|
|
"autoDownload": "Unduh pembaruan baru secara otomatis",
|
|
"checkForUpdates": "Periksa Pembaruan",
|
|
"checkForUpdatesDesc": "Periksa apakah versi Jan yang lebih baru tersedia.",
|
|
"checkingForUpdates": "Memeriksa pembaruan...",
|
|
"noUpdateAvailable": "Anda menjalankan versi terbaru",
|
|
"devVersion": "Versi pengembangan terdeteksi",
|
|
"updateError": "Gagal memeriksa pembaruan",
|
|
"checkForBackendUpdates": "Periksa Pembaruan Llamacpp",
|
|
"checkForBackendUpdatesDesc": "Periksa apakah versi backend Llamacpp yang lebih baru tersedia.",
|
|
"checkingForBackendUpdates": "Memeriksa pembaruan Llamacpp...",
|
|
"noBackendUpdateAvailable": "Anda menjalankan versi Llamacpp terbaru",
|
|
"backendUpdateError": "Gagal memeriksa pembaruan Llamacpp",
|
|
"changeLocation": "Ubah Lokasi",
|
|
"copied": "Tersalin",
|
|
"copyPath": "Salin Jalur",
|
|
"openLogs": "Buka Log",
|
|
"revealLogs": "Tampilkan Log",
|
|
"showInFinder": "Tampilkan di Finder",
|
|
"showInFileExplorer": "Tampilkan di File Explorer",
|
|
"openContainingFolder": "Buka Folder Induk",
|
|
"failedToRelocateDataFolder": "Gagal memindahkan folder data",
|
|
"failedToRelocateDataFolderDesc": "Gagal memindahkan folder data. Silakan coba lagi.",
|
|
"factoryResetTitle": "Setel Ulang ke Pengaturan Pabrik",
|
|
"factoryResetDesc": "Ini akan mengatur ulang semua pengaturan aplikasi ke default. Tindakan ini tidak dapat dibatalkan. Kami hanya merekomendasikan ini jika aplikasi rusak.",
|
|
"cancel": "Batal",
|
|
"reset": "Setel Ulang",
|
|
"resources": "Sumber Daya",
|
|
"documentation": "Dokumentasi",
|
|
"documentationDesc": "Pelajari cara menggunakan Jan dan jelajahi fitur-fiturnya.",
|
|
"viewDocs": "Lihat Dokumentasi",
|
|
"releaseNotes": "Catatan Rilis",
|
|
"releaseNotesDesc": "Lihat apa yang baru di versi terbaru Jan.",
|
|
"viewReleases": "Lihat Rilis",
|
|
"community": "Komunitas",
|
|
"github": "GitHub",
|
|
"githubDesc": "Berkontribusi pada pengembangan Jan.",
|
|
"discord": "Discord",
|
|
"discordDesc": "Bergabunglah dengan komunitas kami untuk dukungan dan diskusi.",
|
|
"support": "Dukungan",
|
|
"reportAnIssue": "Laporkan Masalah",
|
|
"reportAnIssueDesc": "Menemukan bug? Bantu kami dengan mengajukan masalah di GitHub.",
|
|
"reportIssue": "Laporkan Masalah",
|
|
"credits": "Kredit",
|
|
"creditsDesc1": "Jan dibuat dengan ❤️ oleh Tim Menlo.",
|
|
"creditsDesc2": "Terima kasih khusus kepada dependensi sumber terbuka kami—terutama llama.cpp dan Tauri—dan kepada komunitas AI kami yang luar biasa.",
|
|
"appVersion": "Versi Aplikasi",
|
|
"dataFolder": {
|
|
"appData": "Data Aplikasi",
|
|
"appDataDesc": "Lokasi default untuk pesan dan data pengguna lainnya.",
|
|
"appLogs": "Log Aplikasi",
|
|
"appLogsDesc": "Lihat log terperinci dari Aplikasi."
|
|
},
|
|
"others": {
|
|
"spellCheck": "Pemeriksaan Ejaan",
|
|
"spellCheckDesc": "Aktifkan pemeriksaan ejaan untuk utas Anda.",
|
|
"resetFactory": "Setel Ulang ke Pengaturan Pabrik",
|
|
"resetFactoryDesc": "Kembalikan aplikasi ke keadaan semula, menghapus semua model dan riwayat obrolan. Tindakan ini tidak dapat diurungkan dan hanya disarankan jika aplikasi rusak."
|
|
},
|
|
"shortcuts": {
|
|
"application": "Aplikasi",
|
|
"newChat": "Obrolan Baru",
|
|
"newChatDesc": "Buat obrolan baru.",
|
|
"toggleSidebar": "Beralih Bilah Sisi",
|
|
"toggleSidebarDesc": "Tampilkan atau sembunyikan bilah sisi.",
|
|
"zoomIn": "Perbesar",
|
|
"zoomInDesc": "Tingkatkan tingkat zoom.",
|
|
"zoomOut": "Perkecil",
|
|
"zoomOutDesc": "Kurangi tingkat zoom.",
|
|
"chat": "Obrolan",
|
|
"sendMessage": "Kirim Pesan",
|
|
"sendMessageDesc": "Kirim pesan saat ini.",
|
|
"enter": "Enter",
|
|
"newLine": "Baris Baru",
|
|
"newLineDesc": "Sisipkan baris baru.",
|
|
"shiftEnter": "Shift + Enter",
|
|
"navigation": "Navigasi",
|
|
"goToSettings": "Buka Pengaturan",
|
|
"goToSettingsDesc": "Buka pengaturan."
|
|
},
|
|
"appearance": {
|
|
"title": "Tampilan",
|
|
"theme": "Tema",
|
|
"themeDesc": "Sesuaikan dengan tema OS.",
|
|
"fontSize": "Ukuran Font",
|
|
"fontSizeDesc": "Sesuaikan ukuran font aplikasi.",
|
|
"windowBackground": "Latar Belakang Jendela",
|
|
"windowBackgroundDesc": "Atur warna latar belakang jendela aplikasi.",
|
|
"appMainView": "Tampilan Utama Aplikasi",
|
|
"appMainViewDesc": "Atur warna latar belakang area konten utama.",
|
|
"primary": "Utama",
|
|
"primaryDesc": "Atur warna utama untuk komponen UI.",
|
|
"accent": "Aksen",
|
|
"accentDesc": "Atur warna aksen untuk sorotan UI.",
|
|
"destructive": "Merusak",
|
|
"destructiveDesc": "Atur warna untuk tindakan yang merusak.",
|
|
"resetToDefault": "Setel Ulang ke Default",
|
|
"resetToDefaultDesc": "Setel ulang semua pengaturan tampilan ke default.",
|
|
"resetAppearanceSuccess": "Tampilan berhasil diatur ulang",
|
|
"resetAppearanceSuccessDesc": "Semua pengaturan tampilan telah dikembalikan ke default.",
|
|
"chatWidth": "Lebar Obrolan",
|
|
"chatWidthDesc": "Sesuaikan lebar tampilan obrolan.",
|
|
"codeBlockTitle": "Blok Kode",
|
|
"codeBlockDesc": "Pilih gaya penyorotan sintaks.",
|
|
"showLineNumbers": "Tampilkan Nomor Baris",
|
|
"showLineNumbersDesc": "Tampilkan nomor baris di blok kode.",
|
|
"resetCodeBlockStyle": "Setel Ulang Gaya Blok Kode",
|
|
"resetCodeBlockStyleDesc": "Setel ulang gaya blok kode ke default.",
|
|
"resetCodeBlockSuccess": "Gaya blok kode berhasil diatur ulang",
|
|
"resetCodeBlockSuccessDesc": "Gaya blok kode telah dikembalikan ke default."
|
|
},
|
|
"hardware": {
|
|
"os": "Sistem Operasi",
|
|
"name": "Nama",
|
|
"version": "Versi",
|
|
"cpu": "CPU",
|
|
"model": "Model",
|
|
"architecture": "Arsitektur",
|
|
"cores": "Inti",
|
|
"instructions": "Instruksi",
|
|
"usage": "Penggunaan",
|
|
"memory": "Memori",
|
|
"totalRam": "Total RAM",
|
|
"availableRam": "RAM Tersedia",
|
|
"vulkan": "Vulkan",
|
|
"enableVulkan": "Aktifkan Vulkan",
|
|
"enableVulkanDesc": "Gunakan API Vulkan untuk akselerasi GPU. Jangan aktifkan Vulkan jika Anda memiliki GPU NVIDIA karena dapat menyebabkan masalah kompatibilitas.",
|
|
"gpus": "GPU",
|
|
"noGpus": "Tidak ada GPU yang terdeteksi",
|
|
"vram": "VRAM",
|
|
"freeOf": "bebas dari",
|
|
"driverVersion": "Versi Driver",
|
|
"computeCapability": "Kemampuan Komputasi",
|
|
"systemMonitor": "Monitor Sistem"
|
|
},
|
|
"httpsProxy": {
|
|
"proxy": "Proksi",
|
|
"proxyUrl": "URL Proksi",
|
|
"proxyUrlDesc": "URL dan port server proksi Anda.",
|
|
"proxyUrlPlaceholder": "http://proxy.example.com:8080",
|
|
"authentication": "Otentikasi",
|
|
"authenticationDesc": "Kredensial untuk server proksi, jika diperlukan.",
|
|
"username": "Nama Pengguna",
|
|
"password": "Kata Sandi",
|
|
"noProxy": "Tanpa Proksi",
|
|
"noProxyDesc": "Daftar host yang dipisahkan koma untuk melewati proksi.",
|
|
"noProxyPlaceholder": "localhost,127.0.0.1,.local",
|
|
"sslVerification": "Verifikasi SSL",
|
|
"ignoreSsl": "Abaikan Sertifikat SSL",
|
|
"ignoreSslDesc": "Izinkan sertifikat yang ditandatangani sendiri atau tidak terverifikasi. Ini mungkin diperlukan untuk beberapa proksi tetapi mengurangi keamanan. Hanya aktifkan jika Anda mempercayai proksi Anda.",
|
|
"proxySsl": "Proksi SSL",
|
|
"proxySslDesc": "Validasi sertifikat SSL saat menghubungkan ke proksi.",
|
|
"proxyHostSsl": "Host Proksi SSL",
|
|
"proxyHostSslDesc": "Validasi sertifikat SSL dari host proksi.",
|
|
"peerSsl": "SSL Sejawat",
|
|
"peerSslDesc": "Validasi sertifikat SSL dari koneksi sejawat.",
|
|
"hostSsl": "Host SSL",
|
|
"hostSslDesc": "Validasi sertifikat SSL dari host tujuan."
|
|
},
|
|
"localApiServer": {
|
|
"title": "Server API Lokal",
|
|
"description": "Jalankan server yang kompatibel dengan OpenAI secara lokal.",
|
|
"startServer": "Mulai Server",
|
|
"loadingModel": "Memuat Model",
|
|
"startingServer": "Memulai Server",
|
|
"stopServer": "Hentikan Server",
|
|
"serverLogs": "Log Server",
|
|
"serverLogsDesc": "Lihat log terperinci dari server API lokal.",
|
|
"openLogs": "Buka Log",
|
|
"serverConfiguration": "Konfigurasi Server",
|
|
"serverHost": "Host Server",
|
|
"serverHostDesc": "Alamat jaringan untuk server.",
|
|
"serverPort": "Port Server",
|
|
"serverPortDesc": "Nomor port untuk server API.",
|
|
"apiPrefix": "Prefiks API",
|
|
"apiPrefixDesc": "Prefiks jalur untuk titik akhir API.",
|
|
"apiKey": "Kunci API",
|
|
"apiKeyDesc": "Otentikasi permintaan dengan kunci API.",
|
|
"trustedHosts": "Host Tepercaya",
|
|
"trustedHostsDesc": "Host yang diizinkan untuk mengakses server, dipisahkan dengan koma.",
|
|
"advancedSettings": "Pengaturan Lanjutan",
|
|
"cors": "Berbagi Sumber Daya Lintas Asal (CORS)",
|
|
"corsDesc": "Izinkan permintaan lintas asal ke server API.",
|
|
"verboseLogs": "Log Server Verbose",
|
|
"verboseLogsDesc": "Aktifkan log server terperinci untuk debugging.",
|
|
"proxyTimeout": "Permintaan melebihi batas waktu",
|
|
"proxyTimeoutDesc": "Waktu tunggu untuk respons dari model lokal dalam detik."
|
|
},
|
|
"privacy": {
|
|
"analytics": "Analitik",
|
|
"helpUsImprove": "Bantu kami meningkatkan",
|
|
"helpUsImproveDesc": "Untuk membantu kami meningkatkan Jan, Anda dapat membagikan data anonim seperti penggunaan fitur dan jumlah pengguna. Kami tidak pernah mengumpulkan obrolan atau informasi pribadi Anda.",
|
|
"privacyPolicy": "Anda memiliki kendali penuh atas data Anda. Pelajari lebih lanjut di Kebijakan Privasi kami.",
|
|
"analyticsDesc": "Untuk meningkatkan Jan, kami perlu memahami bagaimana ia digunakan—tetapi hanya dengan bantuan Anda. Anda dapat mengubah pengaturan ini kapan saja.",
|
|
"privacyPromises": "Pilihan Anda di sini tidak akan mengubah janji privasi inti kami:",
|
|
"promise1": "Percakapan Anda tetap pribadi dan di perangkat Anda",
|
|
"promise2": "Kami tidak pernah mengumpulkan informasi pribadi atau konten obrolan Anda",
|
|
"promise3": "Semua pembagian data bersifat anonim dan diagregasi",
|
|
"promise4": "Anda dapat memilih keluar kapan saja tanpa kehilangan fungsionalitas",
|
|
"promise5": "Kami transparan tentang apa yang kami kumpulkan dan mengapa"
|
|
},
|
|
"general": {
|
|
"showInFinder": "Tampilkan di Finder",
|
|
"showInFileExplorer": "Tampilkan di File Explorer",
|
|
"openContainingFolder": "Buka Folder Induk",
|
|
"failedToRelocateDataFolder": "Gagal memindahkan folder data",
|
|
"failedToRelocateDataFolderDesc": "Gagal memindahkan folder data. Silakan coba lagi.",
|
|
"devVersion": "Versi pengembangan terdeteksi",
|
|
"noUpdateAvailable": "Anda menjalankan versi terbaru",
|
|
"updateError": "Gagal memeriksa pembaruan",
|
|
"appVersion": "Versi Aplikasi",
|
|
"checkForUpdates": "Periksa Pembaruan",
|
|
"checkForUpdatesDesc": "Periksa apakah versi Jan yang lebih baru tersedia.",
|
|
"checkingForUpdates": "Memeriksa pembaruan...",
|
|
"copied": "Tersalin",
|
|
"copyPath": "Salin Jalur",
|
|
"changeLocation": "Ubah Lokasi",
|
|
"openLogs": "Buka Log",
|
|
"revealLogs": "Tampilkan Log",
|
|
"factoryResetTitle": "Setel Ulang ke Pengaturan Pabrik",
|
|
"factoryResetDesc": "Ini akan mengatur ulang semua pengaturan aplikasi ke default. Tindakan ini tidak dapat dibatalkan. Kami hanya merekomendasikan ini jika aplikasi rusak.",
|
|
"cancel": "Batal",
|
|
"reset": "Setel Ulang",
|
|
"resources": "Sumber Daya",
|
|
"documentation": "Dokumentasi",
|
|
"documentationDesc": "Pelajari cara menggunakan Jan dan jelajahi fitur-fiturnya.",
|
|
"viewDocs": "Lihat Dokumentasi",
|
|
"releaseNotes": "Catatan Rilis",
|
|
"releaseNotesDesc": "Lihat apa yang baru di versi terbaru Jan.",
|
|
"viewReleases": "Lihat Rilis",
|
|
"community": "Komunitas",
|
|
"github": "GitHub",
|
|
"githubDesc": "Berkontribusi pada pengembangan Jan.",
|
|
"discord": "Discord",
|
|
"discordDesc": "Bergabunglah dengan komunitas kami untuk dukungan dan diskusi.",
|
|
"support": "Dukungan",
|
|
"reportAnIssue": "Laporkan Masalah",
|
|
"reportAnIssueDesc": "Menemukan bug? Bantu kami dengan mengajukan masalah di GitHub.",
|
|
"reportIssue": "Laporkan Masalah",
|
|
"credits": "Kredit",
|
|
"creditsDesc1": "Jan dibuat dengan ❤️ oleh Tim Menlo.",
|
|
"creditsDesc2": "Terima kasih khusus kepada dependensi sumber terbuka kami—terutama llama.cpp dan Tauri—dan kepada komunitas AI kami yang luar biasa."
|
|
},
|
|
"extensions": {
|
|
"title": "Ekstensi"
|
|
},
|
|
"dialogs": {
|
|
"changeDataFolder": {
|
|
"title": "Ubah Lokasi Folder Data",
|
|
"description": "Apakah Anda yakin ingin mengubah lokasi folder data? Ini akan memindahkan semua data Anda ke lokasi baru dan memulai ulang aplikasi.",
|
|
"currentLocation": "Lokasi Saat Ini:",
|
|
"newLocation": "Lokasi Baru:",
|
|
"cancel": "Batal",
|
|
"changeLocation": "Ubah Lokasi"
|
|
}
|
|
},
|
|
"backendUpdater": {
|
|
"newBackendVersion": "Versi Llamacpp Baru {{version}}",
|
|
"backendUpdateAvailable": "Pembaruan Llamacpp Tersedia",
|
|
"remindMeLater": "Ingatkan Saya Nanti",
|
|
"updating": "Memperbarui...",
|
|
"updateNow": "Perbarui Sekarang",
|
|
"updateSuccess": "Llamacpp berhasil diperbarui",
|
|
"updateError": "Gagal memperbarui Llamacpp"
|
|
}
|
|
}
|