Skip to content

Commit 1cea96f

Browse files
authored
feat(react-ui): add Indonesian language support (#10266)
Signed-off-by: Dedy F. Setyawan <dedyfajars@gmail.com>
1 parent 006a9d3 commit 1cea96f

16 files changed

Lines changed: 1131 additions & 3 deletions

File tree

core/http/react-ui/i18next-parser.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export default {
2-
locales: ['en', 'it', 'es', 'de', 'zh-CN'],
2+
locales: ['en', 'it', 'es', 'de', 'zh-CN', 'id'],
33
defaultNamespace: 'common',
44
output: 'public/locales/$LOCALE/$NAMESPACE.json',
55
input: ['src/**/*.{js,jsx}'],
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
{
2+
"manage": {
3+
"title": "Sistem",
4+
"subtitle": "Kelola model dan backend yang terinstal"
5+
},
6+
"settings": {
7+
"title": "Pengaturan",
8+
"subtitle": "Konfigurasi pengaturan runtime LocalAI",
9+
"saved": "Pengaturan berhasil disimpan",
10+
"saveFailed": "Gagal menyimpan: {{message}}",
11+
"loadFailed": "Gagal memuat pengaturan: {{message}}",
12+
"sections": {
13+
"branding": "Branding",
14+
"watchdog": "Watchdog",
15+
"memory": "Memori",
16+
"backends": "Backend",
17+
"performance": "Performa",
18+
"tracing": "Tracing",
19+
"api": "API & CORS",
20+
"p2p": "P2P",
21+
"galleries": "Galeri",
22+
"apikeys": "API Key",
23+
"agents": "Agent Job",
24+
"agentpool": "Agent Pool",
25+
"assistant": "Asisten LocalAI",
26+
"responses": "Respons"
27+
}
28+
},
29+
"backends": {
30+
"title": "Manajemen Backend",
31+
"subtitle": "Temukan dan instal backend AI untuk mendukung model Anda"
32+
},
33+
"backendLogs": {
34+
"title": "Log Backend",
35+
"subtitle": "Lihat log dari backend yang sedang berjalan",
36+
"empty": "Tidak ada log yang tersedia"
37+
},
38+
"traces": {
39+
"title": "Trace",
40+
"subtitle": "Lihat log permintaan API, respons, dan operasi backend"
41+
},
42+
"nodes": {
43+
"title": "Node Terdistribusi",
44+
"subtitle": "Kelola node backend dan node worker"
45+
},
46+
"p2p": {
47+
"title": "Komputasi AI Terdistribusi",
48+
"subtitle": "Skalakan beban kerja AI Anda ke beberapa perangkat dengan distribusi peer-to-peer"
49+
},
50+
"users": {
51+
"title": "Pengguna",
52+
"subtitle": "Kelola pengguna terdaftar, peran, dan undangan"
53+
},
54+
"usage": {
55+
"title": "Penggunaan",
56+
"subtitle": "Statistik penggunaan token API",
57+
"sources": {
58+
"tab": "Sumber",
59+
"mixTitle": "Campuran sumber",
60+
"ribbonAria": "{{apikey}}% API Key, {{web}}% Web UI, {{legacy}}% Legasi",
61+
"topSources": "Sumber teratas dari waktu ke waktu",
62+
"searchPlaceholder": "Cari berdasarkan nama atau awalan",
63+
"sortBy": "Urutkan",
64+
"sortTokens": "Token",
65+
"sortRequests": "Permintaan",
66+
"sortLastUsed": "Terakhir digunakan",
67+
"sortName": "Nama",
68+
"sortUser": "Pengguna",
69+
"webUI": "Web UI",
70+
"legacy": "Legasi",
71+
"revoked": " dicabut",
72+
"filteredTo": "Difilter ke: {{name}}",
73+
"clearFilter": "Hapus filter",
74+
"other": "Lainnya ({{count}})",
75+
"noTrafficShort": "Tidak ada permintaan dalam periode ini.",
76+
"noKeysYet": "Setelah permintaan masuk, Anda akan melihat rinciannya di sini.",
77+
"createKey": "Buat API Key pertama Anda",
78+
"truncatedWarning": "Menampilkan 200 key teratas. Terapkan filter untuk mempersempit pencarian."
79+
}
80+
},
81+
"explorer": {
82+
"title": "Penjelajah",
83+
"subtitle": "Jelajahi file dan konfigurasi"
84+
}
85+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"title": "Agen",
3+
"subtitle": "Kelola agen AI otonom",
4+
"actions": {
5+
"agentHub": "Pusat Agen",
6+
"import": "Impor",
7+
"createAgent": "Buat Agen",
8+
"edit": "Edit",
9+
"chat": "Obrolan",
10+
"export": "Ekspor",
11+
"delete": "Hapus",
12+
"pause": "Jeda",
13+
"resume": "Lanjutkan"
14+
},
15+
"table": {
16+
"name": "Nama",
17+
"status": "Status",
18+
"events": "Event",
19+
"actions": "Aksi",
20+
"eventsTooltip": "{{count}} event - Klik untuk melihat"
21+
},
22+
"search": {
23+
"placeholder": "Cari agen...",
24+
"summary_one": "{{shown}} dari {{total}} agen",
25+
"summary_other": "{{shown}} dari {{total}} agen"
26+
},
27+
"empty": {
28+
"noConfigured": "Belum ada agen yang dikonfigurasi",
29+
"noConfiguredText": "Buat agen untuk memulai alur kerja AI otonom.",
30+
"browseHub": "Tidak tahu harus mulai dari mana? Jelajahi <1>Pusat Agen</1> untuk menemukan konfigurasi agen siap pakai yang bisa Anda impor.",
31+
"noMatching": "Tidak ada agen yang cocok",
32+
"noMatchingText": "Tidak ada agen yang cocok dengan \"{{query}}\""
33+
},
34+
"sections": {
35+
"yourAgents": "Agent Anda",
36+
"otherUsersAgents": "Agent Pengguna Lain"
37+
},
38+
"deleteDialog": {
39+
"title": "Hapus Agen",
40+
"message": "Hapus agen \"{{name}}\"? Tindakan ini tidak dapat dibatalkan.",
41+
"confirm": "Hapus"
42+
},
43+
"toasts": {
44+
"loadFailed": "Gagal memuat agen: {{message}}",
45+
"deleted": "Agen \"{{name}}\" berhasil dihapus",
46+
"deleteFailed": "Gagal menghapus agen: {{message}}",
47+
"paused": "Agen \"{{name}}\" dijeda",
48+
"resumed": "Agen \"{{name}}\" dilanjutkan",
49+
"pauseFailed": "Gagal menjeda agen: {{message}}",
50+
"resumeFailed": "Gagal melanjutkan agen: {{message}}",
51+
"exported": "Agen \"{{name}}\" berhasil diekspor",
52+
"exportFailed": "Gagal mengekspor agen: {{message}}",
53+
"parseFailed": "Gagal melakukan parse file agen: {{message}}"
54+
}
55+
}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
{
2+
"login": {
3+
"subtitle": "Masuk untuk melanjutkan",
4+
"registerSubtitle": "Buat akun",
5+
"createAdminSubtitle": "Buat akun admin Anda",
6+
"tokenSubtitle": "Masukkan API key Anda untuk melanjutkan",
7+
"email": "Email",
8+
"emailPlaceholder": "anda@example.com",
9+
"name": "Nama",
10+
"namePlaceholder": "Nama Anda (opsional)",
11+
"password": "Kata Sandi",
12+
"passwordPlaceholder": "Masukkan kata sandi...",
13+
"newPasswordPlaceholder": "Minimal 12 karakter",
14+
"confirmPassword": "Konfirmasi Kata Sandi",
15+
"confirmPasswordPlaceholder": "Ulangi kata sandi",
16+
"inviteCodeLabel": "Kode Undangan",
17+
"inviteCodeOptional": " (opsional — lewati waktu tunggu persetujuan)",
18+
"inviteCodePlaceholder": "Tempel kode undangan Anda...",
19+
"tokenPlaceholder": "Masukkan API key...",
20+
"tokenAltPlaceholder": "Masukkan token API...",
21+
"signIn": "Masuk",
22+
"signingIn": "Sedang masuk...",
23+
"register": "Daftar",
24+
"creatingAccount": "Membuat akun...",
25+
"createAdminAccount": "Buat Akun Admin",
26+
"signInWithGitHub": "Masuk dengan GitHub",
27+
"signInWithSSO": "Masuk dengan SSO",
28+
"loginWithToken": "Masuk dengan Token",
29+
"showTokenLogin": "Masuk dengan Token API",
30+
"hideTokenLogin": "Sembunyikan Token API",
31+
"noAccount": "Belum punya akun?",
32+
"hasAccount": "Sudah punya akun?",
33+
"or": "atau",
34+
"errors": {
35+
"loginFailed": "Gagal masuk",
36+
"registrationFailed": "Gagal mendaftar",
37+
"invalidToken": "Token tidak valid",
38+
"passwordsDoNotMatch": "Kata sandi tidak cocok",
39+
"enterToken": "Silahkan masukkan token",
40+
"networkError": "Eror jaringan",
41+
"inviteRequired": "Kode undangan yang valid diperlukan untuk mendaftar"
42+
},
43+
"messages": {
44+
"registrationPending": "Pendaftaran berhasil, menunggu persetujuan."
45+
}
46+
},
47+
"account": {
48+
"title": "Akun",
49+
"subtitle": "Profil, kredensial, dan API key",
50+
"unavailable": "Akun tidak tersedia",
51+
"unavailableText": "Autentikasi harus diaktifkan untuk mengelola akun Anda.",
52+
"tabs": {
53+
"profile": "Profil",
54+
"security": "Keamanan",
55+
"apiKeys": "API Key"
56+
},
57+
"profile": {
58+
"displayName": "Nama tampilan",
59+
"displayNameDescription": "Nama tampilan publik Anda",
60+
"avatarUrl": "URL Avatar",
61+
"avatarUrlDescription": "URL ke gambar profil Anda",
62+
"avatarUrlPlaceholder": "https://example.com/avatar.png",
63+
"save": "Simpan",
64+
"saving": "Menyimpan...",
65+
"updated": "Profil berhasil diperbarui",
66+
"updateFailed": "Gagal memperbarui profil: {{message}}"
67+
},
68+
"security": {
69+
"currentPassword": "Kata sandi saat ini",
70+
"currentPasswordDescription": "Masukkan kata sandi Anda saat ini untuk memverifikasi identitas Anda",
71+
"currentPasswordPlaceholder": "Kata sandi saat ini",
72+
"newPassword": "Kata sandi baru",
73+
"newPasswordDescription": "Minimal harus 12 karakter",
74+
"newPasswordPlaceholder": "Kata sandi baru",
75+
"confirmPassword": "Konfirmasi kata sandi",
76+
"confirmPasswordDescription": "Masukkan kembali kata sandi baru Anda",
77+
"confirmPasswordPlaceholder": "Konfirmasi kata sandi baru",
78+
"changePassword": "Ubah kata sandi",
79+
"changing": "Mengubah...",
80+
"changed": "Kata sandi berhasil diubah",
81+
"passwordsDoNotMatch": "Kata sandi tidak cocok",
82+
"tooShort": "Kata sandi baru minimal harus 12 karakter",
83+
"oauthOnly": "Manajemen kata sandi tidak tersedia untuk akun {{provider}}."
84+
},
85+
"apiKeys": {
86+
"create": "Buat API key",
87+
"createDescription": "Buat key untuk akses terprogram",
88+
"namePlaceholder": "Nama key (misal: my-app)",
89+
"createButton": "Buat",
90+
"creating": "Membuat...",
91+
"createdToast": "API key berhasil dibuat",
92+
"createFailed": "Gagal membuat API key: {{message}}",
93+
"loadFailed": "Failed to load API keys: {{message}}",
94+
"revoke": "Cabut",
95+
"revokeKey": "Cabut key",
96+
"revokeTitle": "Cabut API Key",
97+
"revokeMessage": "Cabut API key \"{{name}}\"? Tindakan ini tidak dapat dibatalkan.",
98+
"revoked": "API key dicabut",
99+
"revokeFailed": "Gagal mencabut API key: {{message}}",
100+
"copyNow": "Salin sekarang — key ini tidak akan ditampilkan lagi",
101+
"copiedToast": "Berhasil disalin ke papan klip",
102+
"copyFailed": "Gagal menyalin",
103+
"empty": "Belum ada API key. Buat satu di atas untuk akses terprogram.",
104+
"lastUsed": "terakhir digunakan {{date}}"
105+
}
106+
},
107+
"notFound": {
108+
"title": "Halaman Tidak Ditemukan",
109+
"text": "Sepertinya halaman yang Anda cari tidak ditemukan. Mari kembalikan ke halaman sebelumnya.",
110+
"goHome": "Kembali ke Beranda"
111+
}
112+
}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
{
2+
"activity": {
3+
"thought": "Penalaran",
4+
"tool": "Alat",
5+
"result": "Hasil",
6+
"toolResult": "Hasil {{name}}",
7+
"thinking": "Berpikir..."
8+
},
9+
"header": {
10+
"manageModeTooltip": "Obrolan ini dapat menginstal model, mengedit konfigurasi, dan mengelola backend dengan berbicara melalui LocalAI.",
11+
"modelInfo": "Info model",
12+
"chatSettings": "Pengaturan Obrolan",
13+
"modelInfoTitle": "Info model: {{model}}",
14+
"editConfig": "Edit konfigurasi",
15+
"close": "Tutup"
16+
},
17+
"modelInfo": {
18+
"backend": "Backend",
19+
"modelFile": "File model",
20+
"contextSize": "Ukuran konteks",
21+
"threads": "Thread",
22+
"mcp": "MCP",
23+
"configured": "Dikonfigurasi",
24+
"chatTemplate": "Templat Obrolan",
25+
"yes": "Ya",
26+
"gpuLayers": "Layer GPU"
27+
},
28+
"context": {
29+
"label": "Konteks: {{percent}}%",
30+
"labelWithTokens": "Konteks: {{percent}}% ({{tokens}} tokens)"
31+
},
32+
"settings": {
33+
"title": "Pengaturan Obrolan",
34+
"manageMode": "Mode Manajemen",
35+
"manageModeDesc": "Izinkan obrolan ini menginstal model, mengganti backend, dan mengedit konfigurasi dengan berbicara melalui LocalAI.",
36+
"systemPrompt": "System Prompt",
37+
"systemPromptPlaceholder": "Anda adalah asisten yang membantu...",
38+
"temperature": "Temperatur",
39+
"topP": "Top P",
40+
"topK": "Top K",
41+
"contextSize": "Ukuran Konteks",
42+
"contextSizePlaceholder": "2048",
43+
"clearHistory": "Hapus riwayat obrolan"
44+
},
45+
"empty": {
46+
"manageTitle": "Kelola LocalAI dengan obrolan",
47+
"manageText": "Izinkan untuk menginstal model, mengganti backend, mengedit konfigurasi, atau memeriksa status. Asisten akan merangkum tindakan dan menunggu konfirmasi Anda sebelum mengubah apa pun.",
48+
"startTitle": "Mulai percakapan",
49+
"readyText": "Siap untuk mengobrol dengan {{model}}",
50+
"selectModelText": "Pilih model di atas untuk memulai",
51+
"suggestionsManage": [
52+
"Apa saja yang terinstal?",
53+
"Instal model obrolan",
54+
"Tampilkan status sistem",
55+
"Perbarui backend"
56+
],
57+
"suggestionsChat": [
58+
"Jelaskan cara kerjanya",
59+
"Bantu saya menulis kode",
60+
"Rangkum dokumen",
61+
"Gali ide"
62+
],
63+
"recent": "Terbaru",
64+
"noMessages": "Belum ada pesan",
65+
"hintEnter": "Enter untuk mengirim",
66+
"hintShiftEnter": "Shift+Enter untuk baris baru",
67+
"hintAttach": "Lampirkan file"
68+
},
69+
"errors": {
70+
"viewTraces": "Lihat trace untuk detailnya"
71+
},
72+
"actions": {
73+
"copy": "Salin",
74+
"regenerate": "Hasilkan ulang"
75+
},
76+
"streaming": {
77+
"transferring": "Mentransfer model...",
78+
"transferringTo": "Mentransfer model ke {{node}}..."
79+
},
80+
"tokens": {
81+
"perSec": "{{count}} tok/s",
82+
"peak": "Puncak: {{count}} tok/s",
83+
"usage": "{{prompt}}p + {{completion}}c = {{total}}"
84+
},
85+
"input": {
86+
"placeholder": "Pesan...",
87+
"attachFile": "Lampirkan file",
88+
"stopGenerating": "Hentikan pembuatan",
89+
"canvasTitle": "Canvas — ekstrak blok kode dan media ke panel samping untuk pratinjau, salin, dan unduh",
90+
"canvasLabel": "Canvas",
91+
"openCanvas": "Buka panel canvas"
92+
},
93+
"deleteAllDialog": {
94+
"title": "Hapus Semua Obrolan",
95+
"message": "Hapus semua obrolan? Tindakan ini tidak dapat dibatalkan.",
96+
"confirm": "Hapus semua"
97+
},
98+
"toasts": {
99+
"selectModel": "Silahkan pilih model",
100+
"copied": "Berhasil disalin ke papan klip",
101+
"copyFailed": "Gagal menyalin ke papan klip"
102+
},
103+
"menu": {
104+
"trigger": "Obrolan",
105+
"triggerTitle": "Percakapan (Ctrl/Cmd+K)",
106+
"search": "Cari percakapan...",
107+
"clearSearch": "Hapus pencarian",
108+
"noMatch": "Tidak ada percakapan yang cocok dengan pencarian Anda",
109+
"noConversations": "Belum ada percakapan",
110+
"rename": "Ubah nama",
111+
"exportMarkdown": "Ekspor sebagai Markdown",
112+
"deleteChat": "Hapus obrolan",
113+
"newChat": "Obrolan baru",
114+
"clearAll": "Hapus semua",
115+
"deleteAllTitle": "Hapus semua percakapan"
116+
}
117+
}

0 commit comments

Comments
 (0)