feat(i18n): add Indonesian language support

- Add id.json with complete Indonesian translations
- Register Indonesian locale in index.ts with dayjs support
- Add locale detection for 'id' language code
This commit is contained in:
denisetiya 2025-12-08 10:55:32 +07:00
parent 849f5ad443
commit 7c23cbdddb
2 changed files with 289 additions and 0 deletions

285
frontend/src/i18n/id.json Normal file
View File

@ -0,0 +1,285 @@
{
"buttons": {
"cancel": "Batal",
"clear": "Hapus",
"close": "Tutup",
"continue": "Lanjutkan",
"copy": "Salin",
"copyFile": "Salin berkas",
"copyToClipboard": "Salin ke papan klip",
"copyDownloadLinkToClipboard": "Salin tautan unduhan ke papan klip",
"create": "Buat",
"delete": "Hapus",
"download": "Unduh",
"file": "Berkas",
"folder": "Folder",
"fullScreen": "Layar penuh",
"hideDotfiles": "Sembunyikan dotfiles",
"info": "Info",
"more": "Lainnya",
"move": "Pindahkan",
"moveFile": "Pindahkan berkas",
"new": "Baru",
"next": "Berikutnya",
"ok": "OK",
"permalink": "Dapatkan Tautan Permanen",
"previous": "Sebelumnya",
"preview": "Pratinjau",
"publish": "Publikasikan",
"rename": "Ubah nama",
"replace": "Ganti",
"reportIssue": "Laporkan Masalah",
"save": "Simpan",
"schedule": "Jadwalkan",
"search": "Cari",
"select": "Pilih",
"selectMultiple": "Pilih beberapa",
"share": "Bagikan",
"shell": "Buka/tutup shell",
"submit": "Kirim",
"switchView": "Ganti tampilan",
"toggleSidebar": "Buka/tutup sidebar",
"update": "Perbarui",
"upload": "Unggah",
"openFile": "Buka berkas",
"discardChanges": "Buang",
"saveChanges": "Simpan perubahan",
"editAsText": "Edit sebagai Teks",
"increaseFontSize": "Perbesar ukuran font",
"decreaseFontSize": "Perkecil ukuran font"
},
"download": {
"downloadFile": "Unduh Berkas",
"downloadFolder": "Unduh Folder",
"downloadSelected": "Unduh yang Dipilih"
},
"upload": {
"abortUpload": "Apakah Anda yakin ingin membatalkan?"
},
"errors": {
"forbidden": "Anda tidak memiliki izin untuk mengakses ini.",
"internal": "Terjadi kesalahan.",
"notFound": "Lokasi ini tidak dapat ditemukan.",
"connection": "Server tidak dapat dijangkau."
},
"files": {
"body": "Isi",
"closePreview": "Tutup pratinjau",
"files": "Berkas",
"folders": "Folder",
"home": "Beranda",
"lastModified": "Terakhir diubah",
"loading": "Memuat...",
"lonely": "Sepertinya sepi di sini...",
"metadata": "Metadata",
"multipleSelectionEnabled": "Pemilihan ganda diaktifkan",
"name": "Nama",
"size": "Ukuran",
"sortByLastModified": "Urutkan berdasarkan terakhir diubah",
"sortByName": "Urutkan berdasarkan nama",
"sortBySize": "Urutkan berdasarkan ukuran",
"noPreview": "Pratinjau tidak tersedia untuk berkas ini.",
"csvTooLarge": "Berkas CSV terlalu besar untuk pratinjau (>5MB). Silakan unduh untuk melihat.",
"csvLoadFailed": "Gagal memuat berkas CSV.",
"showingRows": "Menampilkan {count} baris",
"columnSeparator": "Pemisah Kolom",
"csvSeparators": {
"comma": "Koma (,)",
"semicolon": "Titik koma (;)",
"both": "Keduanya (,) dan (;)"
}
},
"help": {
"click": "pilih berkas atau direktori",
"ctrl": {
"click": "pilih beberapa berkas atau direktori",
"f": "buka pencarian",
"s": "simpan berkas atau unduh direktori tempat Anda berada"
},
"del": "hapus item yang dipilih",
"doubleClick": "buka berkas atau direktori",
"esc": "hapus pilihan dan/atau tutup prompt",
"f1": "informasi ini",
"f2": "ubah nama berkas",
"help": "Bantuan"
},
"login": {
"createAnAccount": "Buat akun",
"loginInstead": "Sudah punya akun",
"password": "Kata sandi",
"passwordConfirm": "Konfirmasi Kata Sandi",
"passwordsDontMatch": "Kata sandi tidak cocok",
"signup": "Daftar",
"submit": "Masuk",
"username": "Nama pengguna",
"usernameTaken": "Nama pengguna sudah digunakan",
"wrongCredentials": "Kredensial salah",
"passwordTooShort": "Kata sandi minimal {min} karakter",
"logout_reasons": {
"inactivity": "Anda telah keluar karena tidak aktif."
}
},
"permanent": "Permanen",
"prompts": {
"copy": "Salin",
"copyMessage": "Pilih lokasi untuk menyalin berkas Anda:",
"currentlyNavigating": "Saat ini berada di:",
"deleteMessageMultiple": "Apakah Anda yakin ingin menghapus {count} berkas?",
"deleteMessageSingle": "Apakah Anda yakin ingin menghapus berkas/folder ini?",
"deleteMessageShare": "Apakah Anda yakin ingin menghapus berbagi ini ({path})?",
"deleteUser": "Apakah Anda yakin ingin menghapus pengguna ini?",
"deleteTitle": "Hapus berkas",
"displayName": "Nama Tampilan:",
"download": "Unduh berkas",
"downloadMessage": "Pilih format yang ingin Anda unduh.",
"error": "Terjadi kesalahan",
"fileInfo": "Informasi berkas",
"filesSelected": "{count} berkas dipilih.",
"lastModified": "Terakhir Diubah",
"move": "Pindahkan",
"moveMessage": "Pilih lokasi baru untuk berkas/folder Anda:",
"newArchetype": "Buat postingan baru berdasarkan archetype. Berkas Anda akan dibuat di folder content.",
"newDir": "Direktori baru",
"newDirMessage": "Beri nama direktori baru Anda.",
"newFile": "Berkas baru",
"newFileMessage": "Beri nama berkas baru Anda.",
"numberDirs": "Jumlah direktori",
"numberFiles": "Jumlah berkas",
"rename": "Ubah nama",
"renameMessage": "Masukkan nama baru untuk",
"replace": "Ganti",
"replaceMessage": "Salah satu berkas yang Anda coba unggah memiliki nama yang sama. Apakah Anda ingin melewati berkas ini dan melanjutkan unggahan atau mengganti yang sudah ada?\n",
"schedule": "Jadwalkan",
"scheduleMessage": "Pilih tanggal dan waktu untuk menjadwalkan publikasi postingan ini.",
"show": "Tampilkan",
"size": "Ukuran",
"upload": "Unggah",
"uploadFiles": "Mengunggah {files} berkas...",
"uploadMessage": "Pilih opsi untuk mengunggah.",
"optionalPassword": "Kata sandi opsional",
"resolution": "Resolusi",
"discardEditorChanges": "Apakah Anda yakin ingin membuang perubahan yang telah Anda buat?"
},
"search": {
"images": "Gambar",
"music": "Musik",
"pdf": "PDF",
"pressToSearch": "Tekan enter untuk mencari...",
"search": "Cari...",
"typeToSearch": "Ketik untuk mencari...",
"types": "Tipe",
"video": "Video"
},
"settings": {
"aceEditorTheme": "Tema editor Ace",
"admin": "Admin",
"administrator": "Administrator",
"allowCommands": "Jalankan perintah",
"allowEdit": "Edit, ubah nama, dan hapus berkas atau direktori",
"allowNew": "Buat berkas dan direktori baru",
"allowPublish": "Publikasikan postingan dan halaman baru",
"allowSignup": "Izinkan pengguna untuk mendaftar",
"hideLoginButton": "Sembunyikan tombol login dari halaman publik",
"avoidChanges": "(biarkan kosong untuk menghindari perubahan)",
"branding": "Branding",
"brandingDirectoryPath": "Jalur direktori branding",
"brandingHelp": "Anda dapat menyesuaikan tampilan dan nuansa instance File Browser Anda dengan mengubah namanya, mengganti logo, menambahkan gaya kustom, dan bahkan menonaktifkan tautan eksternal ke GitHub.\nUntuk informasi lebih lanjut tentang branding kustom, silakan lihat {0}.",
"changePassword": "Ubah Kata Sandi",
"commandRunner": "Penjalankan perintah",
"commandRunnerHelp": "Di sini Anda dapat mengatur perintah yang dijalankan pada event yang ditentukan. Anda harus menulis satu per baris. Variabel lingkungan {0} dan {1} akan tersedia, dengan {0} relatif terhadap {1}. Untuk informasi lebih lanjut tentang fitur ini dan variabel lingkungan yang tersedia, silakan baca {2}.",
"commandsUpdated": "Perintah diperbarui!",
"createUserDir": "Buat direktori home pengguna otomatis saat menambah pengguna baru",
"minimumPasswordLength": "Panjang kata sandi minimum",
"tusUploads": "Unggahan Chunked",
"tusUploadsHelp": "File Browser mendukung unggahan berkas chunked, memungkinkan pembuatan unggahan berkas yang efisien, andal, dapat dilanjutkan, dan chunked bahkan pada jaringan yang tidak stabil.",
"tusUploadsChunkSize": "Menunjukkan ukuran maksimum permintaan (unggahan langsung akan digunakan untuk unggahan yang lebih kecil). Anda dapat memasukkan bilangan bulat yang menunjukkan ukuran byte atau string seperti 10MB, 1GB dll.",
"tusUploadsRetryCount": "Jumlah percobaan ulang jika chunk gagal diunggah.",
"userHomeBasePath": "Jalur dasar untuk direktori home pengguna",
"userScopeGenerationPlaceholder": "Scope akan dibuat secara otomatis",
"createUserHomeDirectory": "Buat direktori home pengguna",
"customStylesheet": "Stylesheet Kustom",
"defaultUserDescription": "Ini adalah pengaturan default untuk pengguna baru.",
"disableExternalLinks": "Nonaktifkan tautan eksternal (kecuali dokumentasi)",
"disableUsedDiskPercentage": "Nonaktifkan grafik persentase disk yang digunakan",
"documentation": "dokumentasi",
"examples": "Contoh",
"executeOnShell": "Jalankan di shell",
"executeOnShellDescription": "Secara default, File Browser menjalankan perintah dengan memanggil binary secara langsung. Jika Anda ingin menjalankannya di shell (seperti Bash atau PowerShell), Anda dapat mendefinisikannya di sini dengan argumen dan flag yang diperlukan. Jika diatur, perintah yang Anda jalankan akan ditambahkan sebagai argumen. Ini berlaku untuk perintah pengguna dan event hooks.",
"globalRules": "Ini adalah kumpulan aturan izinkan dan tolak global. Aturan ini berlaku untuk setiap pengguna. Anda dapat menentukan aturan khusus pada pengaturan masing-masing pengguna untuk menggantikan aturan ini.",
"globalSettings": "Pengaturan Global",
"hideDotfiles": "Sembunyikan dotfiles",
"insertPath": "Masukkan jalur",
"insertRegex": "Masukkan ekspresi regex",
"instanceName": "Nama instance",
"language": "Bahasa",
"lockPassword": "Cegah pengguna mengubah kata sandi",
"newPassword": "Kata sandi baru Anda",
"newPasswordConfirm": "Konfirmasi kata sandi baru Anda",
"newUser": "Pengguna Baru",
"password": "Kata Sandi",
"passwordUpdated": "Kata sandi diperbarui!",
"path": "Jalur",
"perm": {
"create": "Buat berkas dan direktori",
"delete": "Hapus berkas dan direktori",
"download": "Unduh",
"execute": "Jalankan perintah",
"modify": "Edit berkas",
"rename": "Ubah nama atau pindahkan berkas dan direktori",
"share": "Bagikan berkas"
},
"permissions": "Izin",
"permissionsHelp": "Anda dapat mengatur pengguna menjadi administrator atau memilih izin secara individual. Jika Anda memilih \"Administrator\", semua opsi lainnya akan dicentang secara otomatis. Pengelolaan pengguna tetap menjadi hak istimewa administrator.\n",
"profileSettings": "Pengaturan Profil",
"ruleExample1": "mencegah akses ke dotfile apa pun (seperti .git, .gitignore) di setiap folder.\n",
"ruleExample2": "memblokir akses ke berkas bernama Caddyfile di root scope.",
"rules": "Aturan",
"rulesHelp": "Di sini Anda dapat menentukan kumpulan aturan izinkan dan tolak untuk pengguna tertentu ini. Berkas yang diblokir tidak akan muncul di daftar dan tidak akan dapat diakses oleh pengguna. Kami mendukung regex dan jalur relatif terhadap scope pengguna.\n",
"scope": "Scope",
"setDateFormat": "Atur format tanggal yang tepat",
"settingsUpdated": "Pengaturan diperbarui!",
"shareDuration": "Durasi Berbagi",
"shareManagement": "Manajemen Berbagi",
"shareDeleted": "Berbagi dihapus!",
"singleClick": "Gunakan klik tunggal untuk membuka berkas dan direktori",
"themes": {
"default": "Default sistem",
"dark": "Gelap",
"light": "Terang",
"title": "Tema"
},
"user": "Pengguna",
"userCommands": "Perintah",
"userCommandsHelp": "Daftar perintah yang tersedia untuk pengguna ini, dipisahkan dengan spasi. Contoh:\n",
"userCreated": "Pengguna dibuat!",
"userDefaults": "Pengaturan default pengguna",
"userDeleted": "Pengguna dihapus!",
"userManagement": "Manajemen Pengguna",
"userUpdated": "Pengguna diperbarui!",
"username": "Nama Pengguna",
"users": "Pengguna"
},
"sidebar": {
"help": "Bantuan",
"hugoNew": "Hugo Baru",
"login": "Masuk",
"logout": "Keluar",
"myFiles": "Berkas saya",
"newFile": "Berkas baru",
"newFolder": "Folder baru",
"preview": "Pratinjau",
"settings": "Pengaturan",
"signup": "Daftar",
"siteSettings": "Pengaturan Situs"
},
"success": {
"linkCopied": "Tautan disalin!"
},
"time": {
"days": "Hari",
"hours": "Jam",
"minutes": "Menit",
"seconds": "Detik",
"unit": "Satuan Waktu"
}
}

View File

@ -28,6 +28,7 @@ import("dayjs/locale/sv");
import("dayjs/locale/tr");
import("dayjs/locale/uk");
import("dayjs/locale/vi");
import("dayjs/locale/id");
import("dayjs/locale/zh-cn");
import("dayjs/locale/zh-tw");
@ -114,6 +115,9 @@ export function detectLocale() {
case /^vi\b/.test(locale):
locale = "vi";
break;
case /^id\b/.test(locale):
locale = "id";
break;
case /^sv-se\b/.test(locale):
case /^sv\b/.test(locale):
locale = "sv";