From 222b9734caba389604fd81caa068e815bdb16dcb Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Mon, 5 Feb 2024 12:43:18 +0330 Subject: [PATCH 01/24] Lang - Indonesian #1710 Co-Authored-By: Muhamad Solihin <85750131+lihin929@users.noreply.github.com> --- web/assets/js/langs.js | 5 + web/translation/translate.id_ID.toml | 580 +++++++++++++++++++++++++++ 2 files changed, 585 insertions(+) create mode 100644 web/translation/translate.id_ID.toml diff --git a/web/assets/js/langs.js b/web/assets/js/langs.js index 59f0696f..42fa49ff 100644 --- a/web/assets/js/langs.js +++ b/web/assets/js/langs.js @@ -29,6 +29,11 @@ const supportLangs = [ value: 'es-ES', icon: '🇪🇸', }, + { + name: 'Indonesian', + value: 'id-ID', + icon: '🇮🇩', + }, ]; function getLang() { diff --git a/web/translation/translate.id_ID.toml b/web/translation/translate.id_ID.toml new file mode 100644 index 00000000..1e5dfac1 --- /dev/null +++ b/web/translation/translate.id_ID.toml @@ -0,0 +1,580 @@ +"username" = "Nama Pengguna" +"password" = "Kata Sandi" +"login" = "Masuk" +"confirm" = "Konfirmasi" +"cancel" = "Batal" +"close" = "Tutup" +"copy" = "Salin" +"copied" = "Tersalin" +"download" = "Unduh" +"remark" = "Catatan" +"enable" = "Aktifkan" +"protocol" = "Protokol" +"search" = "Cari" +"filter" = "Filter" +"loading" = "Memuat..." +"second" = "Detik" +"minute" = "Menit" +"hour" = "Jam" +"day" = "Hari" +"check" = "Centang" +"indefinite" = "Tak Terbatas" +"unlimited" = "Tanpa Batas" +"none" = "Tidak Ada" +"qrCode" = "Kode QR" +"info" = "Informasi Lebih Lanjut" +"edit" = "Edit" +"delete" = "Hapus" +"reset" = "Reset" +"copySuccess" = "Berhasil Disalin" +"sure" = "Yakin" +"encryption" = "Enkripsi" +"transmission" = "Transmisi" +"host" = "Host" +"path" = "Jalur" +"camouflage" = "Obfuscation" +"status" = "Status" +"enabled" = "Aktif" +"disabled" = "Nonaktif" +"depleted" = "Habis" +"depletingSoon" = "Akan Habis" +"offline" = "Offline" +"online" = "Online" +"domainName" = "Nama Domain" +"monitor" = "IP Pemantauan" +"certificate" = "Sertifikat" +"fail" = "Gagal" +"success" = "Berhasil" +"getVersion" = "Dapatkan Versi" +"install" = "Instal" +"clients" = "Klien" +"usage" = "Penggunaan" +"secretToken" = "Token Rahasia" +"remained" = "Tersisa" +"security" = "Keamanan" + +[Menu] +"dashboard" = "Ikhtisar" +"inbounds" = "Masuk" +"settings" = "Pengaturan Panel" +"xray" = "Konfigurasi Xray" +"logout" = "Keluar" +"link" = "Kelola" + +[pages.login] +"title" = "Selamat Datang" +"loginAgain" = "Sesi Anda telah berakhir, harap masuk kembali" + +[pages.login.toasts] +"invalidFormData" = "Format data input tidak valid." +"emptyUsername" = "Nama Pengguna diperlukan" +"emptyPassword" = "Kata Sandi diperlukan" +"wrongUsernameOrPassword" = "Nama pengguna atau kata sandi tidak valid." +"successLogin" = "Login berhasil" + +[pages.index] +"title" = "Ikhtisar" +"memory" = "RAM" +"hard" = "Disk" +"xrayStatus" = "Status" +"stopXray" = "Stop" +"restartXray" = "Restart" +"xraySwitch" = "Versi" +"xraySwitchClick" = "Pilih versi yang ingin Anda pindah." +"xraySwitchClickDesk" = "Pilih dengan hati-hati, karena versi yang lebih lama mungkin tidak kompatibel dengan konfigurasi saat ini." +"operationHours" = "Waktu Aktif" +"systemLoad" = "Beban Sistem" +"systemLoadDesc" = "Rata-rata beban sistem selama 1, 5, dan 15 menit terakhir" +"connectionTcpCountDesc" = "Total koneksi TCP di seluruh sistem" +"connectionUdpCountDesc" = "Total koneksi UDP di seluruh sistem" +"connectionCount" = "Statistik Koneksi" +"upSpeed" = "Kecepatan unggah keseluruhan di seluruh sistem" +"downSpeed" = "Kecepatan unduh keseluruhan di seluruh sistem" +"totalSent" = "Total data terkirim di seluruh sistem sejak startup OS" +"totalReceive" = "Total data diterima di seluruh sistem sejak startup OS" +"xraySwitchVersionDialog" = "Ganti Versi Xray" +"xraySwitchVersionDialogDesc" = "Apakah Anda yakin ingin mengubah versi Xray menjadi" +"dontRefresh" = "Instalasi sedang berlangsung, harap jangan menyegarkan halaman ini" +"logs" = "Log" +"config" = "Konfigurasi" +"backup" = "Cadangan & Pulihkan" +"backupTitle" = "Cadangan & Pulihkan Database" +"backupDescription" = "Disarankan untuk membuat cadangan sebelum memulihkan database." +"exportDatabase" = "Cadangkan" +"importDatabase" = "Pulihkan" + +[pages.inbounds] +"title" = "Masuk" +"totalDownUp" = "Total Terkirim/Diterima" +"totalUsage" = "Penggunaan Total" +"inboundCount" = "Total Masuk" +"operate" = "Menu" +"enable" = "Aktifkan" +"remark" = "Catatan" +"protocol" = "Protokol" +"port" = "Port" +"traffic" = "Traffic" +"details" = "Rincian" +"transportConfig" = "Transport" +"expireDate" = "Durasi" +"resetTraffic" = "Reset Traffic" +"addInbound" = "Tambahkan Masuk" +"generalActions" = "Tindakan Umum" +"create" = "Buat" +"update" = "Perbarui" +"modifyInbound" = "Ubah Masuk" +"deleteInbound" = "Hapus Masuk" +"deleteInboundContent" = "Apakah Anda yakin ingin menghapus masuk?" +"deleteClient" = "Hapus Klien" +"deleteClientContent" = "Apakah Anda yakin ingin menghapus klien?" +"resetTrafficContent" = "Apakah Anda yakin ingin mereset traffic?" +"copyLink" = "Salin URL" +"address" = "Alamat" +"network" = "Jaringan" +"destinationPort" = "Port Tujuan" +"targetAddress" = "Alamat Target" +"monitorDesc" = "Biarkan kosong untuk mendengarkan semua IP" +"meansNoLimit" = " = Unlimited. (unit: GB)" +"totalFlow" = "Total Aliran" +"leaveBlankToNeverExpire" = "Biarkan kosong untuk tidak pernah kedaluwarsa" +"noRecommendKeepDefault" = "Disarankan untuk tetap menggunakan pengaturan default" +"certificatePath" = "Path Berkas" +"certificateContent" = "Konten Berkas" +"publicKeyPath" = "Path Kunci Publik" +"publicKeyContent" = "Konten Kunci Publik" +"keyPath" = "Path Kunci Privat" +"keyContent" = "Konten Kunci Privat" +"clickOnQRcode" = "Klik pada Kode QR untuk Menyalin" +"client" = "Klien" +"export" = "Ekspor Semua URL" +"clone" = "Duplikat" +"cloneInbound" = "Duplikat" +"cloneInboundContent" = "Semua pengaturan masuk ini, kecuali Port, Listening IP, dan Klien, akan diterapkan pada duplikat." +"cloneInboundOk" = "Duplikat" +"resetAllTraffic" = "Reset Semua Traffic Masuk" +"resetAllTrafficTitle" = "Reset Semua Traffic Masuk" +"resetAllTrafficContent" = "Apakah Anda yakin ingin mereset traffic semua masuk?" +"resetInboundClientTraffics" = "Reset Traffic Klien Masuk" +"resetInboundClientTrafficTitle" = "Reset Traffic Klien Masuk" +"resetInboundClientTrafficContent" = "Apakah Anda yakin ingin mereset traffic klien masuk ini?" +"resetAllClientTraffics" = "Reset Traffic Semua Klien" +"resetAllClientTrafficTitle" = "Reset Traffic Semua Klien" +"resetAllClientTrafficContent" = "Apakah Anda yakin ingin mereset traffic semua klien?" +"delDepletedClients" = "Hapus Klien Habis" +"delDepletedClientsTitle" = "Hapus Klien Habis" +"delDepletedClientsContent" = "Apakah Anda yakin ingin menghapus semua klien yang habis?" +"email" = "Email" +"emailDesc" = "Harap berikan alamat email yang unik." +"IPLimit" = "Batas IP" +"IPLimitDesc" = "Menonaktifkan masuk jika jumlah melebihi nilai yang ditetapkan. (0 = nonaktif)" +"IPLimitlog" = "Log IP" +"IPLimitlogDesc" = "Log histori IP. (untuk mengaktifkan masuk setelah menonaktifkan, hapus log)" +"IPLimitlogclear" = "Hapus Log" +"setDefaultCert" = "Atur Sertifikat dari Panel" +"xtlsDesc" = "Xray harus versi 1.7.5" +"realityDesc" = "Xray harus versi 1.8.0+" +"telegramDesc" = "Harap berikan ID Telegram atau obrolan tanpa menggunakan '@'. (dapatkan di sini @userinfobot) atau (gunakan perintah '/id' di bot)" +"subscriptionDesc" = "Untuk menemukan URL langganan Anda, buka 'Rincian'. Selain itu, Anda dapat menggunakan nama yang sama untuk beberapa klien." +"info" = "Info" +"same" = "Sama" +"inboundData" = "Data Masuk" +"exportInbound" = "Ekspor Masuk" +"import" = "Impor" +"importInbound" = "Impor Masuk" + +[pages.client] +"add" = "Tambah Klien" +"edit" = "Edit Klien" +"submitAdd" = "Tambah Klien" +"submitEdit" = "Simpan Perubahan" +"clientCount" = "Jumlah Klien" +"bulk" = "Tambahkan Massal" +"method" = "Metode" +"first" = "Pertama" +"last" = "Terakhir" +"prefix" = "Awalan" +"postfix" = "Akhiran" +"delayedStart" = "Mulai saat Penggunaan Awal" +"expireDays" = "Durasi" +"days" = "Hari" +"renew" = "Perpanjang Otomatis" +"renewDesc" = "Perpanjangan otomatis setelah kedaluwarsa. (0 = nonaktif)(unit: hari)" + +[pages.inbounds.toasts] +"obtain" = "Dapatkan" + +[pages.inbounds.stream.general] +"request" = "Permintaan" +"response" = "Respons" +"name" = "Nama" +"value" = "Nilai" + +[pages.inbounds.stream.tcp] +"version" = "Versi" +"method" = "Metode" +"path" = "Path" +"status" = "Status" +"statusDescription" = "Deskripsi Status" +"requestHeader" = "Header Permintaan" +"responseHeader" = "Header Respons" + +[pages.inbounds.stream.quic] +"encryption" = "Enkripsi" + +[pages.settings] +"title" = "Pengaturan Panel" +"save" = "Simpan" +"infoDesc" = "Setiap perubahan yang dibuat di sini perlu disimpan. Harap restart panel untuk menerapkan perubahan." +"restartPanel" = "Restart Panel" +"restartPanelDesc" = "Apakah Anda yakin ingin merestart panel? Jika Anda tidak dapat mengakses panel setelah merestart, lihat info log panel di server." +"actions" = "Tindakan" +"resetDefaultConfig" = "Reset ke Default" +"panelSettings" = "Umum" +"securitySettings" = "Otentikasi" +"TGBotSettings" = "Bot Telegram" +"panelListeningIP" = "IP Pendengar" +"panelListeningIPDesc" = "Alamat IP untuk panel web. (biarkan kosong untuk mendengarkan semua IP)" +"panelListeningDomain" = "Domain Pendengar" +"panelListeningDomainDesc" = "Nama domain untuk panel web. (biarkan kosong untuk mendengarkan semua domain dan IP)" +"panelPort" = "Port Pendengar" +"panelPortDesc" = "Nomor port untuk panel web. (harus menjadi port yang tidak digunakan)" +"publicKeyPath" = "Path Kunci Publik" +"publicKeyPathDesc" = "Path berkas kunci publik untuk panel web. (dimulai dengan ‘/‘)" +"privateKeyPath" = "Path Kunci Privat" +"privateKeyPathDesc" = "Path berkas kunci privat untuk panel web. (dimulai dengan ‘/‘)" +"panelUrlPath" = "URI Path" +"panelUrlPathDesc" = "URI path untuk panel web. (dimulai dengan ‘/‘ dan diakhiri dengan ‘/‘)" +"pageSize" = "Ukuran Halaman" +"pageSizeDesc" = "Tentukan ukuran halaman untuk tabel masuk. (0 = nonaktif)" +"remarkModel" = "Model Catatan & Karakter Pemisah" +"datepicker" = "Jenis Kalender" +"datepickerPlaceholder" = "Pilih tanggal" +"datepickerDescription" = "Tugas terjadwal akan berjalan berdasarkan kalender ini." +"sampleRemark" = "Contoh Catatan" +"oldUsername" = "Username Saat Ini" +"currentPassword" = "Kata Sandi Saat Ini" +"newUsername" = "Username Baru" +"newPassword" = "Kata Sandi Baru" +"telegramBotEnable" = "Aktifkan Bot Telegram" +"telegramBotEnableDesc" = "Mengaktifkan bot Telegram." +"telegramToken" = "Token Telegram" +"telegramTokenDesc" = "Token bot Telegram yang diperoleh dari '@BotFather'." +"telegramProxy" = "Proxy SOCKS" +"telegramProxyDesc" = "Mengaktifkan proxy SOCKS5 untuk terhubung ke Telegram. (sesuaikan pengaturan sesuai panduan)" +"telegramChatId" = "ID Obrolan Admin" +"telegramChatIdDesc" = "ID Obrolan Admin Telegram. (dipisahkan koma)(dapatkan di sini @userinfobot) atau (gunakan perintah '/id' di bot)" +"telegramNotifyTime" = "Waktu Notifikasi" +"telegramNotifyTimeDesc" = "Waktu notifikasi bot Telegram yang diatur untuk laporan berkala. (gunakan format waktu crontab)" +"tgNotifyBackup" = "Cadangan Database" +"tgNotifyBackupDesc" = "Kirim berkas cadangan database dengan laporan." +"tgNotifyLogin" = "Notifikasi Login" +"tgNotifyLoginDesc" = "Dapatkan notifikasi tentang username, alamat IP, dan waktu setiap kali seseorang mencoba masuk ke panel web Anda." +"sessionMaxAge" = "Durasi Sesi" +"sessionMaxAgeDesc" = "Durasi di mana Anda dapat tetap masuk. (unit: menit)" +"expireTimeDiff" = "Notifikasi Tanggal Kedaluwarsa" +"expireTimeDiffDesc" = "Dapatkan notifikasi tentang tanggal kedaluwarsa saat mencapai ambang batas ini. (unit: hari)" +"trafficDiff" = "Notifikasi Batas Traffic" +"trafficDiffDesc" = "Dapatkan notifikasi tentang batas traffic saat mencapai ambang batas ini. (unit: GB)" +"tgNotifyCpu" = "Notifikasi Beban CPU" +"tgNotifyCpuDesc" = "Dapatkan notifikasi jika beban CPU melebihi ambang batas ini. (unit: %)" +"timeZone" = "Zone Waktu" +"timeZoneDesc" = "Tugas terjadwal akan berjalan berdasarkan zona waktu ini." +"subSettings" = "Langganan" +"subEnable" = "Aktifkan Layanan Langganan" +"subEnableDesc" = "Mengaktifkan layanan langganan." +"subListen" = "IP Pendengar" +"subListenDesc" = "Alamat IP untuk layanan langganan. (biarkan kosong untuk mendengarkan semua IP)" +"subPort" = "Port Pendengar" +"subPortDesc" = "Nomor port untuk layanan langganan. (harus menjadi port yang tidak digunakan)" +"subCertPath" = "Path Kunci Publik" +"subCertPathDesc" = "Path berkas kunci publik untuk layanan langganan. (dimulai dengan ‘/‘)" +"subKeyPath" = "Path Kunci Privat" +"subKeyPathDesc" = "Path berkas kunci privat untuk layanan langganan. (dimulai dengan ‘/‘)" +"subPath" = "URI Path" +"subPathDesc" = "URI path untuk layanan langganan. (dimulai dengan ‘/‘ dan diakhiri dengan ‘/‘)" +"subDomain" = "Domain Pendengar" +"subDomainDesc" = "Nama domain untuk layanan langganan. (biarkan kosong untuk mendengarkan semua domain dan IP)" +"subUpdates" = "Interval Pembaruan" +"subUpdatesDesc" = "Interval pembaruan URL langganan dalam aplikasi klien. (unit: jam)" +"subEncrypt" = "Encode" +"subEncryptDesc" = "Konten yang dikembalikan dari layanan langganan akan dienkripsi Base64." +"subShowInfo" = "Tampilkan Info Penggunaan" +"subShowInfoDesc" = "Sisa traffic dan tanggal akan ditampilkan di aplikasi klien." +"subURI" = "URI Proxy Terbalik" +"subURIDesc" = "URI path URL langganan untuk penggunaan di belakang proxy." + +[pages.xray] +"title" = "Konfigurasi Xray" +"save" = "Simpan" +"restart" = "Restart Xray" +"basicTemplate" = "Dasar" +"advancedTemplate" = "Lanjutan" +"generalConfigs" = "Strategi Umum" +"generalConfigsDesc" = "Opsi ini akan menentukan penyesuaian strategi umum." +"blockConfigs" = "Pelindung" +"blockConfigsDesc" = "Opsi ini akan memblokir lalu lintas berdasarkan protokol dan situs web yang diminta." +"blockCountryConfigs" = "Blokir Negara" +"blockCountryConfigsDesc" = "Opsi ini akan memblokir lalu lintas berdasarkan negara yang diminta." +"directCountryConfigs" = "Langsung ke Negara" +"directCountryConfigsDesc" = "Opsi ini akan langsung meneruskan lalu lintas berdasarkan negara yang diminta." +"ipv4Configs" = "Pengalihan IPv4" +"ipv4ConfigsDesc" = "Opsi ini akan mengalihkan lalu lintas berdasarkan tujuan tertentu melalui IPv4." +"warpConfigs" = "Pengalihan WARP" +"warpConfigsDesc" = "Opsi ini akan mengalihkan lalu lintas berdasarkan tujuan tertentu melalui WARP." +"Template" = "Template Konfigurasi Xray Lanjutan" +"TemplateDesc" = "File konfigurasi Xray akhir akan dibuat berdasarkan template ini." +"FreedomStrategy" = "Strategi Protokol Freedom" +"FreedomStrategyDesc" = "Atur strategi output untuk jaringan dalam Protokol Freedom." +"RoutingStrategy" = "Strategi Pengalihan Keseluruhan" +"RoutingStrategyDesc" = "Atur strategi pengalihan lalu lintas keseluruhan untuk menyelesaikan semua permintaan." +"Torrent" = "Blokir Protokol BitTorrent" +"TorrentDesc" = "Memblokir protokol BitTorrent." +"PrivateIp" = "Blokir Koneksi ke IP Pribadi" +"PrivateIpDesc" = "Memblokir pembentukan koneksi ke rentang IP pribadi." +"Ads" = "Blokir Iklan" +"AdsDesc" = "Memblokir situs web periklanan." +"Family" = "Proteksi Keluarga" +"FamilyDesc" = "Memblokir konten dewasa dan situs web berbahaya." +"Security" = "Pelindung Keamanan" +"SecurityDesc" = "Memblokir situs web malware, phishing, dan penambang kripto." +"Speedtest" = "Blokir Speedtest" +"SpeedtestDesc" = "Memblokir pembentukan koneksi ke situs web speedtest." +"IRIp" = "Blokir Koneksi ke IP Iran" +"IRIpDesc" = "Memblokir pembentukan koneksi ke rentang IP Iran." +"IRDomain" = "Blokir Koneksi ke Domain Iran" +"IRDomainDesc" = "Memblokir pembentukan koneksi ke domain Iran." +"ChinaIp" = "Blokir Koneksi ke IP China" +"ChinaIpDesc" = "Memblokir pembentukan koneksi ke rentang IP China." +"ChinaDomain" = "Blokir Koneksi ke Domain China" +"ChinaDomainDesc" = "Memblokir pembentukan koneksi ke domain China." +"RussiaIp" = "Blokir Koneksi ke IP Rusia" +"RussiaIpDesc" = "Memblokir pembentukan koneksi ke rentang IP Rusia." +"RussiaDomain" = "Blokir Koneksi ke Domain Rusia" +"RussiaDomainDesc" = "Memblokir pembentukan koneksi ke domain Rusia." +"VNIp" = "Blokir Koneksi ke IP Vietnam" +"VNIpDesc" = "Memblokir pembentukan koneksi ke rentang IP Vietnam." +"VNDomain" = "Blokir Koneksi ke Domain Vietnam" +"VNDomainDesc" = "Memblokir pembentukan koneksi ke domain Vietnam." +"DirectIRIp" = "Koneksi Langsung ke IP Iran" +"DirectIRIpDesc" = "Membentuk koneksi langsung ke rentang IP Iran." +"DirectIRDomain" = "Koneksi Langsung ke Domain Iran" +"DirectIRDomainDesc" = "Membentuk koneksi langsung ke domain Iran." +"DirectChinaIp" = "Koneksi Langsung ke IP China" +"DirectChinaIpDesc" = "Membentuk koneksi langsung ke rentang IP China." +"DirectChinaDomain" = "Koneksi Langsung ke Domain China" +"DirectChinaDomainDesc" = "Membentuk koneksi langsung ke domain China." +"DirectRussiaIp" = "Koneksi Langsung ke IP Rusia" +"DirectRussiaIpDesc" = "Membentuk koneksi langsung ke rentang IP Rusia." +"DirectRussiaDomain" = "Koneksi Langsung ke Domain Rusia" +"DirectRussiaDomainDesc" = "Membentuk koneksi langsung ke domain Rusia." +"DirectVNIp" = "Koneksi Langsung ke IP Vietnam" +"DirectVNIpDesc" = "Membentuk koneksi langsung ke rentang IP Vietnam." +"DirectVNDomain" = "Koneksi Langsung ke Domain Vietnam" +"DirectVNDomainDesc" = "Membentuk koneksi langsung ke domain Vietnam." +"GoogleIPv4" = "Google" +"GoogleIPv4Desc" = "Rute lalu lintas ke Google melalui IPv4." +"NetflixIPv4" = "Netflix" +"NetflixIPv4Desc" = "Rute lalu lintas ke Netflix melalui IPv4." +"GoogleWARP" = "Google" +"GoogleWARPDesc" = "Tambahkan pengalihan untuk Google melalui WARP." +"OpenAIWARP" = "ChatGPT" +"OpenAIWARPDesc" = "Rute lalu lintas ke ChatGPT melalui WARP." +"NetflixWARP" = "Netflix" +"NetflixWARPDesc" = "Rute lalu lintas ke Netflix melalui WARP." +"SpotifyWARP" = "Spotify" +"SpotifyWARPDesc" = "Rute lalu lintas ke Spotify melalui WARP." +"IRWARP" = "Domain Iran" +"IRWARPDesc" = "Rute lalu lintas ke domain Iran melalui WARP." +"Inbounds" = "Masuk" +"InboundsDesc" = "Menerima klien tertentu." +"Outbounds" = "Keluar" +"OutboundsDesc" = "Atur jalur lalu lintas keluar." +"Routings" = "Aturan Pengalihan" +"RoutingsDesc" = "Prioritas setiap aturan penting!" +"completeTemplate" = "Semua" +"logLevel" = "Tingkat Log" +"logLevelDesc" = "Tingkat log untuk log kesalahan, menunjukkan informasi yang perlu dicatat." +"accessLog" = "Log Akses" +"accessLogDesc" = "Jalur file untuk log akses. Nilai khusus 'tidak ada' menonaktifkan log akses" + +[pages.xray.rules] +"first" = "Pertama" +"last" = "Terakhir" +"up" = "Naik" +"down" = "Turun" +"source" = "Sumber" +"dest" = "Tujuan" +"inbound" = "Masuk" +"outbound" = "Keluar" +"info" = "Info" +"add" = "Tambahkan Aturan" +"edit" = "Edit Aturan" +"useComma" = "Item yang dipisahkan koma" + +[pages.xray.outbound] +"addOutbound" = "Tambahkan Keluar" +"addReverse" = "Tambahkan Revers" +"editOutbound" = "Edit Keluar" +"editReverse" = "Edit Revers" +"tag" = "Tag" +"tagDesc" = "Tag Unik" +"address" = "Alamat" +"reverse" = "Revers" +"domain" = "Domain" +"type" = "Tipe" +"bridge" = "Jembatan" +"portal" = "Portal" +"intercon" = "Interkoneksi" + +[pages.xray.wireguard] +"secretKey" = "Kunci Rahasia" +"publicKey" = "Kunci Publik" +"allowedIPs" = "IP yang Diizinkan" +"endpoint" = "Titik Akhir" +"psk" = "Kunci Pra-Bagi" +"domainStrategy" = "Strategi Domain" + +[pages.settings.security] +"admin" = "Admin" +"secret" = "Token Rahasia" +"loginSecurity" = "Login Aman" +"loginSecurityDesc" = "Menambahkan lapisan otentikasi tambahan untuk memberikan keamanan lebih." +"secretToken" = "Token Rahasia" +"secretTokenDesc" = "Simpan token ini dengan aman di tempat yang aman. Token ini diperlukan untuk login dan tidak dapat dipulihkan." + +[pages.settings.toasts] +"modifySettings" = "Ubah Pengaturan" +"getSettings" = "Dapatkan Pengaturan" +"modifyUser" = "Ubah Admin" +"originalUserPassIncorrect" = "Username atau password saat ini tidak valid" +"userPassMustBeNotEmpty" = "Username dan password baru tidak boleh kosong" + +[tgbot] +"keyboardClosed" = "❌ Papan ketik kustom ditutup!" +"noResult" = "❗ Tidak ada hasil!" +"noQuery" = "❌ Permintaan tidak ditemukan! Harap gunakan perintah lagi!" +"wentWrong" = "❌ Ada yang salah!" +"noIpRecord" = "❗ Tidak ada Catatan IP!" +"noInbounds" = "❗ Tidak ada masuk ditemukan!" +"unlimited" = "♾ Tak terbatas" +"add" = "Tambah" +"month" = "Bulan" +"months" = "Bulan" +"day" = "Hari" +"days" = "Hari" +"hours" = "Jam" +"unknown" = "Tidak diketahui" +"inbounds" = "Masuk" +"clients" = "Klien" +"offline" = "🔴 Offline" +"online" = "🟢 Online" + +[tgbot.commands] +"unknown" = "❗ Perintah tidak dikenal." +"pleaseChoose" = "👇 Harap pilih:\r\n" +"help" = "🤖 Selamat datang di bot ini! Ini dirancang untuk menyediakan data tertentu dari panel web dan memungkinkan Anda melakukan modifikasi sesuai kebutuhan.\r\n\r\n" +"start" = "👋 Halo {{ .Firstname }}.\r\n" +"welcome" = "🤖 Selamat datang di {{.Hostname }} bot managemen.\r\n" +"status" = "✅ Bot dalam keadaan baik!" +"usage" = "❗ Harap berikan teks untuk mencari!" +"getID" = "🆔 ID Anda:{{.ID }}" +"helpAdminCommands" = "Untuk mencari email klien:\r\n/usage [Email]\r\n\r\nUntuk mencari masuk (dengan statistik klien):\r\n/inbound [Remark]" +"helpClientCommands" = "Untuk mencari statistik, gunakan perintah berikut:\r\n\r\n/usage [Email]" + +[tgbot.messages] +"cpuThreshold" = "🔴 Beban CPU {{ .Percent }}% melebihi batas {{ .Threshold }}%" +"selectUserFailed" = "❌ Kesalahan dalam pemilihan pengguna!" +"userSaved" = "✅ Pengguna Telegram tersimpan." +"loginSuccess" = "✅ Berhasil masuk ke panel.\r\n" +"loginFailed" = "❗️ Gagal masuk ke panel.\r\n" +"report" = "🕰 Laporan Terjadwal: {{ .RunTime }}\r\n" +"datetime" = "⏰ Tanggal & Waktu: {{ .DateTime }}\r\n" +"hostname" = "💻 Host: {{ .Hostname }}\r\n" +"version" = "🚀 Versi 3X-UI: {{ .Version }}\r\n" +"ipv6" = "🌐 IPv6: {{ .IPv6 }}\r\n" +"ipv4" = "🌐 IPv4: {{ .IPv4 }}\r\n" +"ip" = "🌐 IP: {{ .IP }}\r\n" +"ips" = "🔢 IP:\r\n{{ .IPs }}\r\n" +"serverUpTime" = "⏳ Waktu Aktif: {{ .UpTime }} {{ .Unit }}\r\n" +"serverLoad" = "📈 Beban Sistem: {{ .Load1 }}, {{ .Load2 }}, {{ .Load3 }}\r\n" +"serverMemory" = "📋 RAM: {{ .Current }}/{{ .Total }}\r\n" +"tcpCount" = "🔹 TCP: {{ .Count }}\r\n" +"udpCount" = "🔸 UDP: {{ .Count }}\r\n" +"traffic" = "🚦 Lalu Lintas: {{ .Total }} (↑{{ .Upload }},↓{{ .Download }})\r\n" +"xrayStatus" = "ℹ️ Status: {{ .State }}\r\n" +"username" = "👤 Nama Pengguna: {{ .Username }}\r\n" +"time" = "⏰ Waktu: {{ .Time }}\r\n" +"inbound" = "📍 Inbound: {{ .Remark }}\r\n" +"port" = "🔌 Port: {{ .Port }}\r\n" +"expire" = "📅 Tanggal Kadaluarsa: {{ .Time }}\r\n" +"expireIn" = "📅 Kadaluarsa Dalam: {{ .Time }}\r\n" +"active" = "💡 Aktif: {{ .Enable }}\r\n" +"enabled" = "🚨 Diaktifkan: {{ .Enable }}\r\n" +"online" = "🌐 Status Koneksi: {{ .Status }}\r\n" +"email" = "📧 Email: {{ .Email }}\r\n" +"upload" = "🔼 Unggah: ↑{{ .Upload }}\r\n" +"download" = "🔽 Unduh: ↓{{ .Download }}\r\n" +"total" = "📊 Total: ↑↓{{ .UpDown }} / {{ .Total }}\r\n" +"TGUser" = "👤 Pengguna Telegram: {{ .TelegramID }}\r\n" +"exhaustedMsg" = "🚨 Habis {{ .Type }}:\r\n" +"exhaustedCount" = "🚨 Jumlah Habis {{ .Type }}:\r\n" +"onlinesCount" = "🌐 Klien Online: {{ .Count }}\r\n" +"disabled" = "🛑 Dinonaktifkan: {{ .Disabled }}\r\n" +"depleteSoon" = "🔜 Habis Sebentar: {{ .Deplete }}\r\n\r\n" +"backupTime" = "🗄 Waktu Backup: {{ .Time }}\r\n" +"refreshedOn" = "\r\n📋🔄 Diperbarui Pada: {{ .Time }}\r\n\r\n" +"yes" = "✅ Ya" +"no" = "❌ Tidak" + +[tgbot.buttons] +"closeKeyboard" = "❌ Tutup Papan Ketik" +"cancel" = "❌ Batal" +"cancelReset" = "❌ Batal Reset" +"cancelIpLimit" = "❌ Batal Batas IP" +"confirmResetTraffic" = "✅ Konfirmasi Reset Lalu Lintas?" +"confirmClearIps" = "✅ Konfirmasi Hapus IPs?" +"confirmRemoveTGUser" = "✅ Konfirmasi Hapus Pengguna Telegram?" +"confirmToggle" = "✅ Konfirmasi Aktifkan/Nonaktifkan Pengguna?" +"dbBackup" = "Dapatkan Cadangan DB" +"serverUsage" = "Penggunaan Server" +"getInbounds" = "Dapatkan Inbounds" +"depleteSoon" = "Habis Sebentar" +"clientUsage" = "Dapatkan Penggunaan" +"onlines" = "Klien Online" +"commands" = "Perintah" +"refresh" = "🔄 Perbarui" +"clearIPs" = "❌ Hapus IPs" +"removeTGUser" = "❌ Hapus Pengguna Telegram" +"selectTGUser" = "👤 Pilih Pengguna Telegram" +"selectOneTGUser" = "👤 Pilih Pengguna Telegram:" +"resetTraffic" = "📈 Reset Lalu Lintas" +"resetExpire" = "📅 Ubah Tanggal Kadaluarsa" +"ipLog" = "🔢 Log IP" +"ipLimit" = "🔢 Batas IP" +"setTGUser" = "👤 Set Pengguna Telegram" +"toggle" = "🔘 Aktifkan / Nonaktifkan" +"custom" = "🔢 Kustom" +"confirmNumber" = "✅ Konfirmasi: {{ .Num }}" +"confirmNumberAdd" = "✅ Konfirmasi menambahkan: {{ .Num }}" +"limitTraffic" = "🚧 Batas Lalu Lintas" +"getBanLogs" = "Dapatkan Log Pemblokiran" + +[tgbot.answers] +"successfulOperation" = "✅ Operasi berhasil!" +"errorOperation" = "❗ Kesalahan dalam operasi." +"getInboundsFailed" = "❌ Gagal mendapatkan inbounds." +"canceled" = "❌ {{ .Email }}: Operasi dibatalkan." +"clientRefreshSuccess" = "✅ {{ .Email }}: Klien diperbarui dengan berhasil." +"IpRefreshSuccess" = "✅ {{ .Email }}: IP diperbarui dengan berhasil." +"TGIdRefreshSuccess" = "✅ {{ .Email }}: Pengguna Telegram Klien diperbarui dengan berhasil." +"resetTrafficSuccess" = "✅ {{ .Email }}: Lalu lintas direset dengan berhasil." +"setTrafficLimitSuccess" = "✅ {{ .Email }}: Batas lalu lintas disimpan dengan berhasil." +"expireResetSuccess" = "✅ {{ .Email }}: Hari kadaluarsa direset dengan berhasil." +"resetIpSuccess" = "✅ {{ .Email }}: Batas IP {{ .Count }} disimpan dengan berhasil." +"clearIpSuccess" = "✅ {{ .Email }}: IP dihapus dengan berhasil." +"getIpLog" = "✅ {{ .Email }}: Dapatkan Log IP." +"getUserInfo" = "✅ {{ .Email }}: Dapatkan Info Pengguna Telegram." +"removedTGUserSuccess" = "✅ {{ .Email }}: Pengguna Telegram dihapus dengan berhasil." +"enableSuccess" = "✅ {{ .Email }}: Diaktifkan dengan berhasil." +"disableSuccess" = "✅ {{ .Email }}: Dinonaktifkan dengan berhasil." +"askToAddUserId" = "Konfigurasi Anda tidak ditemukan!\r\nSilakan minta admin Anda untuk menggunakan ID Telegram Anda dalam konfigurasi Anda.\r\n\r\nID Pengguna Anda: {{ .TgUserID }}" From c53cee31f5a64ed3292f977bf5a0749324eb78a2 Mon Sep 17 00:00:00 2001 From: Saeid <43953720+surbiks@users.noreply.github.com> Date: Tue, 6 Feb 2024 11:40:49 +0330 Subject: [PATCH 02/24] Manage balancers in settings UI (#1759) * add balancer config to ui * manage balancer in rules table * fix balancer translations * fix edit button text --- web/html/xui/xray.html | 166 ++++++++++++++++++++++++- web/html/xui/xray_balancer_modal.html | 111 +++++++++++++++++ web/html/xui/xray_rule_modal.html | 23 +++- web/translation/translate.en_US.toml | 11 ++ web/translation/translate.es_ES.toml | 11 ++ web/translation/translate.fa_IR.toml | 11 ++ web/translation/translate.ru_RU.toml | 11 ++ web/translation/translate.vi_VN.toml | 11 ++ web/translation/translate.zh_Hans.toml | 11 ++ 9 files changed, 363 insertions(+), 3 deletions(-) create mode 100644 web/html/xui/xray_balancer_modal.html diff --git a/web/html/xui/xray.html b/web/html/xui/xray.html index 267103cb..a144c766 100644 --- a/web/html/xui/xray.html +++ b/web/html/xui/xray.html @@ -327,6 +327,14 @@ [[ rule.outboundTag ]] + - {{template "form/sniffing"}} -{{end}} \ No newline at end of file +{{end}} diff --git a/web/html/xui/form/stream/external_proxy.html b/web/html/xui/form/stream/external_proxy.html index 2a072df9..9c3ed2e0 100644 --- a/web/html/xui/form/stream/external_proxy.html +++ b/web/html/xui/form/stream/external_proxy.html @@ -20,7 +20,7 @@ - - + - {{end}} diff --git a/web/html/xui/form/stream/stream_tcp.html b/web/html/xui/form/stream/stream_tcp.html index 19a09ac3..8576df8c 100644 --- a/web/html/xui/form/stream/stream_tcp.html +++ b/web/html/xui/form/stream/stream_tcp.html @@ -33,7 +33,7 @@ - + + + @@ -79,4 +79,4 @@ -{{end}} \ No newline at end of file +{{end}} diff --git a/web/html/xui/form/stream/stream_ws.html b/web/html/xui/form/stream/stream_ws.html index 00b64167..62380e94 100644 --- a/web/html/xui/form/stream/stream_ws.html +++ b/web/html/xui/form/stream/stream_ws.html @@ -7,7 +7,7 @@ - + + + diff --git a/web/html/xui/index.html b/web/html/xui/index.html index a9391952..abd3b8d0 100644 --- a/web/html/xui/index.html +++ b/web/html/xui/index.html @@ -18,6 +18,14 @@ .ant-card-dark h2 { color: hsla(0, 0%, 100%, .65); } + + .ant-tag-df { + color: rgb(0 0 0 / 80%); + } + + .dark .ant-tag-df { + color: rgb(255 255 255 / 80%); + } @@ -36,15 +44,15 @@ -
CPU: [[ cpuCoreFormat(status.cpuCores) ]]
-
Speed: [[ cpuSpeedFormat(status.cpuSpeedMhz) ]]
+
CPU: [[ cpuCoreFormat(status.cpuCores) ]]
+
Speed: [[ cpuSpeedFormat(status.cpuSpeedMhz) ]]
- {{ i18n "pages.index.memory"}}: [[ sizeFormat(status.mem.current) ]] / [[ sizeFormat(status.mem.total) ]] + {{ i18n "pages.index.memory"}}: [[ sizeFormat(status.mem.current) ]] / [[ sizeFormat(status.mem.total) ]]
@@ -56,7 +64,7 @@ :stroke-color="status.swap.color" :percent="status.swap.percent">
- Swap: [[ sizeFormat(status.swap.current) ]] / [[ sizeFormat(status.swap.total) ]] + Swap: [[ sizeFormat(status.swap.current) ]] / [[ sizeFormat(status.swap.total) ]]
@@ -64,7 +72,7 @@ :stroke-color="status.disk.color" :percent="status.disk.percent">
- {{ i18n "pages.index.hard"}}: [[ sizeFormat(status.disk.current) ]] / [[ sizeFormat(status.disk.total) ]] + {{ i18n "pages.index.hard"}}: [[ sizeFormat(status.disk.current) ]] / [[ sizeFormat(status.disk.total) ]]
@@ -75,25 +83,25 @@ - + - 3X-UI v{{ .cur_ver }} - Xray v[[ status.xray.version ]] - @panel3xui + 3X-UI: + v{{ .cur_ver }} + @Panel3xui - + - {{ i18n "menu.link" }}: - {{ i18n "pages.index.logs" }} - {{ i18n "pages.index.config" }} - {{ i18n "pages.index.backup" }} + {{ i18n "pages.index.operationHours" }}: + Xray [[ formatSecond(status.appStats.uptime) ]] + OS [[ formatSecond(status.uptime) ]] - + - {{ i18n "pages.index.xrayStatus" }}: - [[ status.xray.state ]] + {{ i18n "pages.index.xrayStatus" }}: + [[ status.xray.state ]] + An error occurred while running Xray @@ -106,137 +114,143 @@ {{ i18n "pages.index.stopXray" }} {{ i18n "pages.index.restartXray" }} - {{ i18n "pages.index.xraySwitch" }} + v[[ status.xray.version ]] - + - {{ i18n "pages.index.operationHours" }}: - Xray - [[ formatSecond(status.appStats.uptime) ]] - OS - [[ formatSecond(status.uptime) ]] + {{ i18n "menu.link" }}: + {{ i18n "pages.index.logs" }} + {{ i18n "pages.index.config" }} + {{ i18n "pages.index.backup" }} - + - {{ i18n "pages.index.systemLoad" }}: [[ status.loads[0] ]] | [[ status.loads[1] ]] | [[ status.loads[2] ]] + {{ i18n "pages.index.systemLoad" }}: + + [[ status.loads[0] ]] | [[ status.loads[1] ]] | [[ status.loads[2] ]] - + - + - {{ i18n "usage"}}: - RAM [[ sizeFormat(status.appStats.mem) ]] - - Threads [[ status.appStats.threads ]] - + {{ i18n "usage"}}: + + RAM [[ sizeFormat(status.appStats.mem) ]] + + + Threads [[ status.appStats.threads ]] + - + - - IPv4: + + IPv4 - - - - - IPv6: + + + + + IPv6 - + - + - - TCP: [[ status.tcpCount ]] + + TCP: [[ status.tcpCount ]] - + - - UDP: [[ status.udpCount ]] + + UDP: [[ status.udpCount ]] - + - + - - [[ sizeFormat(status.netIO.up) ]]/s + + + Up: [[ sizeFormat(status.netIO.up) ]]/s - + - - [[ sizeFormat(status.netIO.down) ]]/s + + + Down: [[ sizeFormat(status.netIO.down) ]]/s - + - + - - [[ sizeFormat(status.netTraffic.sent) ]] + + - + Out: [[ sizeFormat(status.netTraffic.sent) ]] + - - [[ sizeFormat(status.netTraffic.recv) ]] + + - + In: [[ sizeFormat(status.netTraffic.recv) ]] + @@ -256,7 +270,7 @@ > diff --git a/web/html/xui/settings.html b/web/html/xui/settings.html index 0acbbfec..533553c5 100644 --- a/web/html/xui/settings.html +++ b/web/html/xui/settings.html @@ -76,15 +76,15 @@ - - - + + + {{ i18n "pages.settings.save" }} {{ i18n "pages.settings.restartPanel" }} - +