diff --git a/frontend-enterprise/scripts/check-i18n.cjs b/frontend-enterprise/scripts/check-i18n.cjs index b75ce4b..bebf0f8 100644 --- a/frontend-enterprise/scripts/check-i18n.cjs +++ b/frontend-enterprise/scripts/check-i18n.cjs @@ -5,6 +5,7 @@ const ts = require('typescript'); const projectRoot = path.resolve(__dirname, '..'); const sourceRoot = path.join(projectRoot, 'src'); const catalog = require(path.join(sourceRoot, 'i18n', 'en.json')); +const indonesianCatalog = require(path.join(sourceRoot, 'i18n', 'id.json')); const ignoredFiles = new Set([ path.join(sourceRoot, 'components', 'LanguageSwitcher.tsx'), ]); @@ -63,7 +64,12 @@ const invalidTargets = Object.entries(catalog).filter( ([, target]) => !target.trim() || /[\u3400-\u9fff]/.test(target), ); -if (missing.size || invalidTargets.length) { +const idMissingKeys = Object.keys(catalog).filter((key) => !(key in indonesianCatalog)); +const idInvalidTargets = Object.entries(indonesianCatalog).filter( + ([, target]) => !target.trim(), +); + +if (missing.size || invalidTargets.length || idMissingKeys.length || idInvalidTargets.length) { if (missing.size) { console.error(`Missing English translations (${missing.size}):`); for (const [location, value] of missing) { @@ -76,7 +82,21 @@ if (missing.size || invalidTargets.length) { console.error(`- ${JSON.stringify(source)} => ${JSON.stringify(target)}`); } } + if (idMissingKeys.length) { + console.error(`Missing Indonesian translations (${idMissingKeys.length}):`); + for (const key of idMissingKeys.slice(0, 20)) { + console.error(`- ${JSON.stringify(key)}`); + } + if (idMissingKeys.length > 20) console.error(` ... and ${idMissingKeys.length - 20} more`); + } + if (idInvalidTargets.length) { + console.error(`Invalid Indonesian translations (${idInvalidTargets.length}):`); + for (const [source, target] of idInvalidTargets.slice(0, 20)) { + console.error(`- ${JSON.stringify(source)} => ${JSON.stringify(target)}`); + } + if (idInvalidTargets.length > 20) console.error(` ... and ${idInvalidTargets.length - 20} more`); + } process.exit(1); } -console.log(`i18n coverage OK: ${Object.keys(catalog).length} English translations.`); +console.log(`i18n coverage OK: ${Object.keys(catalog).length} English translations, ${Object.keys(indonesianCatalog).length} Indonesian translations.`); diff --git a/frontend-enterprise/scripts/gen-id.cjs b/frontend-enterprise/scripts/gen-id.cjs new file mode 100644 index 0000000..789aec0 --- /dev/null +++ b/frontend-enterprise/scripts/gen-id.cjs @@ -0,0 +1,1977 @@ +/** + * Generate Indonesian (id-ID) translation catalog from en.json. + * Uses a comprehensive translation map for ~1800 keys. + * Run: node scripts/gen-id.cjs + */ +const fs = require('fs'); +const path = require('path'); + +const enPath = path.join(__dirname, '..', 'src', 'i18n', 'en.json'); +const idPath = path.join(__dirname, '..', 'src', 'i18n', 'id.json'); + +const en = JSON.parse(fs.readFileSync(enPath, 'utf8')); + +// Translation map: Chinese source → Indonesian translation +// This covers the full catalog. Placeholders like {1}, {2} are preserved. +const T = { + // Common UI words + "保存": "Simpan", + "保存并发布": "Simpan dan Terbitkan", + "保存并清空": "Simpan dan Kosongkan", + "保存草稿": "Simpan Draf", + "保存失败": "Gagal Menyimpan", + "保存设置": "Simpan Pengaturan", + "保存版本 {1}": "Simpan Versi {1}", + "保存后不可修改名称。": "Setelah disimpan, nama tidak dapat diubah.", + "保存技能失败": "Gagal menyimpan keterampilan", + "保存数字员工档案失败": "Gagal menyimpan profil karyawan digital", + "保存头像": "Simpan Avatar", + "保存头像失败": "Gagal menyimpan avatar", + "保存文档失败": "Gagal menyimpan dokumen", + "保存账号失败": "Gagal menyimpan akun", + "保存知识库失败": "Gagal menyimpan basis pengetahuan", + "保存知识内容失败": "Gagal menyimpan konten pengetahuan", + "保存知识图谱失败": "Gagal menyimpan grafik pengetahuan", + "保存定时任务失败": "Gagal menyimpan tugas terjadwal", + "保存SOP版本": "Simpan Versi SOP", + "保存后可选择并测试": "Setelah disimpan, dapat Dipilih dan Diuji", + "保存后到点会拉起一个新的执行记录,并交给当前员工按 SOP、技能、资料和工具执行。": "Sesuai jadwal, catatan eksekusi baru akan dibuat dan diberikan kepada karyawan saat ini untuk dieksekusi sesuai SOP, keterampilan, data, dan alat.", + "版本": "Versi", + "版本操作": "Tindakan Versi", + "版本范围": "Cakupan Versi", + "版本管理": "Manajemen Versi", + "版本管理:{1}": "Manajemen Versi: {1}", + "版本号": "Versi", + "版本列表": "Daftar Versi", + "版本筛选": "Filter Versi", + "版本详情": "Detail Versi", + "版本详情:{1} / {2}": "Detail Versi: {1} / {2}", + "版本与内容": "Versi dan Konten", + + // Actions + "操作": "Tindakan", + "测试": "Uji", + "测试参数": "Parameter Uji", + "测试参数 JSON(拼到 URL Query)": "Parameter Uji JSON (ditambahkan ke Query URL)", + "测试参数 JSON(作为请求 Body)": "Parameter Uji JSON (dikirim sebagai Body permintaan)", + "测试参数不是合法 JSON": "Parameter uji bukan JSON yang valid", + "测试接口": "Uji Endpoint", + "测试结果": "Hasil Uji", + "测试可用": "Ketersediaan Uji", + "测试失败": "Uji Gagal", + "测试通过": "Uji Berhasil", + "测试问题": "Masalah Uji", + "测试中": "MengujI", + + // View / Display + "查看": "Lihat", + "查看超时结果": "Lihat Hasil Waktu Habis", + "查看错误输出": "Lihat Keluaran Error", + "查看代码": "Lihat Kode", + "查看当前服务状态": "Lihat Status Layanan Saat Ini", + "查看对话日志": "Lihat Log Percakapan", + "查看更多": "Lihat Lebih Banyak", + "查看核心功能": "Lihat Kemampuan Inti", + "查看会话": "Lihat Sesi", + "查看记录": "Lihat catatan", + "查看目录下的知识图谱": "Lihat Grafik Pengetahuan di Direktori", + "查看能力": "Lihat Kemampuan", + "查看全部": "Lihat Semua", + "查看输出": "Lihat Keluaran", + "查看我的数字员工": "Lihat Karyawan Digital Saya", + "查看详情": "Lihat Detail", + "查看校验详情": "Lihat Detail Validasi", + "查看引用来源": "Lihat Sumber Kutipan", + "查看运行输出": "Lihat Keluaran Jalankan", + "查看知识图谱": "Lihat Grafik Pengetahuan", + "查看执行结果": "Lihat Hasil Eksekusi", + "查看状态": "Lihat Status", + + // CRUD + "创建": "Buat", + "创建定时任务失败": "Gagal membuat tugas terjadwal", + "创建方式": "Metode Pembuatan", + "创建后不可修改": "Tidak dapat diubah setelah dibuat", + "创建时间": "Waktu Pembuatan", + "创建数字员工失败": "Gagal membuat karyawan digital", + "创建新员工": "Buat Karyawan Baru", + "创建账号失败": "Gagal membuat akun", + "创建者": "Pembuat", + "创建者:": "Pembuat:", + "删除": "Hapus", + "删除失败": "Gagal Menghapus", + "删除会话": "Hapus Sesi", + "删除节点": "Hapus Node", + "删除员工失败": "Gagal menghapus karyawan", + "删除账号失败": "Gagal menghapus akun", + "编辑": "Edit", + "编辑 MCP 服务器": "Edit Server MCP", + "编辑 SOP": "Edit SOP", + "编辑本地版本": "Edit Versi Lokal", + "编辑定时任务": "Edit Tugas Terjadwal", + "编辑工具": "Edit Alat", + "编辑技能": "Edit Keterampilan", + "编辑模型:{1}": "Edit Model: {1}", + "编辑内部索引与引用来源": "Edit Indeks Internal dan Sumber Kutipan", + "编辑数字员工档案": "Edit Profil Karyawan Digital", + "编辑数字员工档案:{1}": "Edit Profil Karyawan Digital: {1}", + "编辑文档": "Edit Dokumen", + "编辑账号": "Edit Akun", + "编辑账号:{1}": "Edit Akun: {1}", + "编辑知识图谱": "Edit Grafik Pengetahuan", + "编辑资料": "Edit Data", + + // Search + "搜索": "Cari", + "搜索 SOP 名称、ID、业务域": "Cari Nama SOP, ID, Domain Bisnis", + "搜索工具名称、描述、URL 或分桶": "Cari Nama Alat, Deskripsi, URL atau Bucket", + "搜索技能名称、Slug、描述或主页": "Cari Nama Keterampilan, Slug, Deskripsi atau Beranda", + "搜索名称、模型、Provider 或 Base URL": "Cari Nama, Model, Provider atau Base URL", + "搜索数字员工": "Cari Karyawan Digital", + "搜索用户名或显示名": "Cari Nama Pengguna atau Nama Tampilan", + "搜索员工": "Cari Karyawan", + "搜索知识库名称、描述、状态或版本": "Cari Nama Basis Pengetahuan, Deskripsi, Status atau Versi", + "搜索{1}": "Cari {1}", + "清除搜索": "Hapus Pencarian", + + // Common phrases + "取消": "Batal", + "确认": "Konfirmasi", + "确认创建": "Konfirmasi Pembuatan", + "确认删除": "Konfirmasi Hapus", + "确认失败": "Gagal Mengkonfirmasi", + "确认事项": "Konfirmasi", + "确认新增": "Konfirmasi Tambah", + "确认后执行": "Eksekusi Setelah Konfirmasi", + "确认回退": "Konfirmasi Mundur", + "返回": "Kembali", + "关闭": "Tutup", + "刷新": "Segarkan", + "重试": "Coba Lagi", + "重置": "Atur Ulang", + "停止": "Berhenti", + "暂停": "Jeda", + "启用": "Aktifkan", + "停用": "Nonaktifkan", + "发布": "Terbitkan", + "下线": "Offline", + "上线": "Terbitkan", + "继续": "Lanjutkan", + + // Status + "处理中": "Sedang Diproses", + "成功": "Berhasil", + "失败": "Gagal", + "待处理": "Menunggu", + "待审批": "Menunggu Persetujuan", + "已完成": "Selesai", + "已保存": "Tersimpan", + "已删除": "Dihapus", + "已启用": "Aktif", + "已停用": "Nonaktif", + "已发布": "Diterbitkan", + "已下线": "Offline", + "已上线": "Online", + "已取消": "Dibatalkan", + "已暂停": "Dijeda", + "已停止": "Berhenti", + "已确认": "Dikonfirmasi", + "已拒绝": "Ditolak", + "已跳过": "Dilewati", + "已创建": "Dibuat", + "已完成": "Selesai", + "执行中": "Sedang Dieksekusi", + "运行中": "Sedang Berjalan", + "排队中": "Antrian", + "草稿": "Draf", + + // Employee related + "数字员工": "Karyawan Digital", + "数字员工创建成功": "Karyawan Digital Berhasil Dibuat", + "数字员工档案": "Profil Karyawan Digital", + "数字员工档案已更新": "Profil Karyawan Digital Diperbarui", + "数字员工分类": "Kategori Karyawan Digital", + "数字员工广场": "Pasar Karyawan Digital", + "数字员工统计": "Statistik Karyawan Digital", + "数字员工姓名": "Nama Karyawan Digital", + "数字员工运营平台": "Platform Operasional Karyawan Digital", + "员工": "Karyawan", + "员工操作": "Tindakan Karyawan", + "员工档案": "Profil Karyawan", + "员工岗位描述": "Deskripsi Posisi Karyawan", + "员工工具": "Alat Karyawan", + "员工会话": "Sesi Karyawan", + "员工记忆": "Memori Karyawan", + "员工记忆分页": "Paginasi Memori Karyawan", + "员工记忆详情": "Detail Memori Karyawan", + "员工能力": "Kemampuan Karyawan", + "员工头像已更新": "Avatar Karyawan Diperbarui", + "员工信息": "Informasi Karyawan", + "员工已删除": "Karyawan Dihapus", + "员工已上线": "Karyawan Online", + "员工已下线": "Karyawan Offline", + "员工总数": "Total Karyawan", + "当前员工": "Karyawan Saat Ini", + "上一位员工": "Karyawan Sebelumnya", + "下一位员工": "Karyawan Berikutnya", + "全部员工": "Semua Karyawan", + "在线员工": "Karyawan Online", + "使用此员工": "Gunakan Karyawan Ini", + "切换当前员工": "Ganti Karyawan Saat Ini", + "请选择员工": "Pilih Karyawan", + + // Knowledge + "知识库": "Basis Pengetahuan", + "知识库操作": "Tindakan Basis Pengetahuan", + "知识库广场": "Pasar Basis Pengetahuan", + "知识库广场列表": "Daftar Pasar Basis Pengetahuan", + "知识库列表": "Daftar Basis Pengetahuan", + "知识库描述": "Deskripsi Basis Pengetahuan", + "知识库名称": "Nama Basis Pengetahuan", + "知识库统计": "Statistik Basis Pengetahuan", + "知识库详情": "Detail Basis Pengetahuan", + "知识库总数": "Total Basis Pengetahuan", + "知识图谱": "Grafik Pengetahuan", + "知识图谱标题": "Judul Grafik Pengetahuan", + "知识图谱检查": "Pemeriksaan Grafik Pengetahuan", + "知识图谱检查:{1}": "Pemeriksaan Grafik Pengetahuan: {1}", + "知识图谱检查失败": "Pemeriksaan Grafik Pengetahuan Gagal", + "知识图谱检查通过": "Pemeriksaan Grafik Pengetahuan Berhasil", + "知识图谱引用": "Kutipan Grafik Pengetahuan", + "知识图谱引用 {1}": "Kutipan Grafik Pengetahuan {1}", + "知识图谱元信息": "Metadata Grafik Pengetahuan", + "知识图谱源码": "Kode Sumber Grafik Pengetahuan", + "知识详情": "Detail Pengetahuan", + "知识引用": "Kutipan Pengetahuan", + "知识运营": "Operasional Pengetahuan", + "知识运营员工": "Karyawan Operasional Pengetahuan", + "新建知识库": "Basis Pengetahuan Baru", + "暂无知识库": "Belum Ada Basis Pengetahuan", + "暂无知识库,点击「新增」创建一个吧": "Belum Ada Basis Pengetahuan. Klik \"Tambah\" untuk Membuat.", + "暂无知识图谱": "Belum Ada Grafik Pengetahuan", + "加载知识库失败": "Gagal memuat basis pengetahuan", + "加载知识图谱失败": "Gagal memuat grafik pengetahuan", + "刷新知识库失败": "Gagal menyegarkan basis pengetahuan", + + // Tools + "工具": "Alat", + "工具操作": "Tindakan Alat", + "工具测试": "Uji Alat", + "工具测试成功:{1}": "Uji Alat Berhasil: {1}", + "工具测试失败:{1}": "Uji Alat Gagal: {1}", + "工具测试完成": "Uji Alat Selesai", + "工具测试完成:{1} 个成功,{2} 个失败": "Uji Alat Selesai: {1} Berhasil, {2} Gagal", + "工具调用": "Panggilan Alat", + "工具调用失败": "Panggilan Alat Gagal", + "工具定义": "Definisi Alat", + "工具分桶": "Bucket Alat", + "工具分页": "Paginasi Alat", + "工具广场": "Pasar Alat", + "工具广场列表": "Daftar Pasar Alat", + "工具集": "Set Alat", + "工具类型": "Tipe Alat", + "工具列表": "Daftar Alat", + "工具名:": "Nama Alat:", + "工具名称": "Nama Alat", + "工具能力": "Kemampuan Alat", + "工具配置": "Konfigurasi Alat", + "工具数": "Jumlah Alat", + "工具统计": "Statistik Alat", + "工具问题": "Masalah Alat", + "工具详情": "Detail Alat", + "工具信息": "Informasi Alat", + "工具信息不足": "Informasi Alat Tidak Cukup", + "工具执行成功": "Eksekusi Alat Berhasil", + "工具执行失败": "Eksekusi Alat Gagal", + "工具总数": "Total Alat", + "新建工具": "Alat Baru", + "暂无工具": "Belum Ada Alat", + "暂无工具,点击「新增」创建一个吧": "Belum Ada Alat. Klik \"Tambah\" untuk Membuat.", + "加载工具失败": "Gagal memuat alat", + + // Skills + "技能": "Keterampilan", + "技能操作": "Tindakan Keterampilan", + "技能分页": "Paginasi Keterampilan", + "技能广场": "Pasar Keterampilan", + "技能广场列表": "Daftar Pasar Keterampilan", + "技能列表": "Daftar Keterampilan", + "技能名称": "Nama Keterampilan", + "技能升级": "Peningkatan Keterampilan", + "技能说明、权限或运行配置有更新": "Deskripsi, izin, atau konfigurasi runtime keterampilan telah diperbarui", + "技能统计": "Statistik Keterampilan", + "技能文件": "Berkas Keterampilan", + "技能运行超时,请检查模型或稍后重试。": "Waktu eksekusi keterampilan habis. Periksa model atau coba lagi nanti.", + "技能自发现工具": "Alat yang Ditemukan Sendiri oleh Keterampilan", + "技能总数": "Total Keterampilan", + "新建技能": "Keterampilan Baru", + "暂无技能": "Belum Ada Keterampilan", + "暂无技能,点击「新增」创建一个吧": "Belum Ada Keterampilan. Klik \"Tambah\" untuk Membuat.", + "加载技能": "Muat Keterampilan", + "加载技能失败": "Gagal memuat keterampilan", + + // SOP + "SOP 版本": "Versi SOP", + "SOP 操作": "Tindakan SOP", + "SOP 调用": "Panggilan SOP", + "SOP 分页": "Paginasi SOP", + "SOP 广场": "Pasar SOP", + "SOP 广场列表": "Daftar Pasar SOP", + "SOP 进化": "Evolusi SOP", + "SOP 列表": "Daftar SOP", + "SOP 名称": "Nama SOP", + "SOP 排行": "Peringkat SOP", + "SOP 问题": "Masalah SOP", + "SOP 已保存": "SOP Tersimpan", + "SOP 执行": "Eksekusi SOP", + "SOP名称": "Nama SOP", + "新建SOP": "SOP Baru", + "新建 SOP": "SOP Baru", + "新建空白 SOP": "SOP Kosong Baru", + "暂无 SOP": "Belum Ada SOP", + "暂无 SOP 草稿": "Belum Ada Draf SOP", + "暂无 SOP,点击「新增」创建一个吧": "Belum Ada SOP. Klik \"Tambah\" untuk Membuat.", + + // Models + "模型": "Model", + "模型操作": "Tindakan Model", + "模型分页": "Paginasi Model", + "模型列表": "Daftar Model", + "模型配置": "Konfigurasi Model", + "模型统计": "Statistik Model", + "默认模型": "Model Default", + "新建模型": "Model Baru", + "暂无模型": "Belum Ada Model", + "暂无模型,点击「新建模型」添加一个吧": "Belum Ada Model. Klik \"Model Baru\" untuk Menambahkan.", + "加载模型失败": "Gagal memuat model", + + // Accounts + "账号": "Akun", + "账号操作": "Tindakan Akun", + "账号分页": "Paginasi Akun", + "账号管理": "Manajemen Akun", + "账号角色": "Peran Akun", + "账号列表": "Daftar Akun", + "账号已创建": "Akun Dibuat", + "账号已更新": "Akun Diperbarui", + "账号已删除": "Akun Dihapus", + "账户菜单": "Menu Akun", + "新建账号": "Akun Baru", + "暂无账号": "Belum Ada Akun", + "加载账号失败": "Gagal memuat akun", + "清空账号": "Kosongkan Akun", + + // Conversation + "对话": "Percakapan", + "对话端": "Chat", + "对话反馈统计": "Statistik Umpan Balik Percakapan", + "对话记录": "Catatan Percakapan", + "对话任务": "Tugas Percakapan", + "对话日志": "Log Percakapan", + "对话日志分页": "Paginasi Log Percakapan", + "对话日志筛选": "Filter Log Percakapan", + "对话日志详情": "Detail Log Percakapan", + "对话蒸馏": "Distilasi Percakapan", + "发起对话": "Mulai Percakapan", + "发起对话失败": "Gagal Memulai Percakapan", + "新对话": "Percakapan Baru", + "会话": "Sesi", + "会话 ID": "ID Sesi", + "会话 Trace": "Trace Sesi", + "会话加载失败": "Gagal memuat sesi", + "加载对话详情失败": "Gagal memuat detail percakapan", + "暂无对话日志": "Belum Ada Log Percakapan", + "暂无对话任务": "Belum Ada Tugas Percakapan", + "暂无历史会话": "Belum Ada Riwayat Sesi", + + // Chat actions + "发送": "Kirim", + "发送失败": "Gagal Mengirim", + "回复用户": "Balas Pengguna", + "回复失败": "Gagal Membalas", + "输入消息,按 Enter 发送...": "Ketik pesan, tekan Enter untuk mengirim...", + "取消": "Batal", + "转人工": "Serahkan ke Manusia", + "转人工处理": "Serahkan ke Manusia", + + // Memory + "记忆": "Memori", + "记忆查询": "Pencarian Memori", + "记忆数": "Jumlah Memori", + "暂无记忆": "Belum Ada Memori", + "清空我的记忆": "Kosongkan Memori Saya", + "更新记忆": "Perbarui Memori", + + // Trace + "暂无 Trace": "Belum Ada Trace", + "轨迹加载失败": "Gagal memuat trace", + + // Marketplace / Public + "广场": "Pasar", + "广场版": "Versi Pasar", + "开放广场": "Pasar Terbuka", + "开放广场平台": "Platform Pasar Terbuka", + "数字员工广场": "Pasar Karyawan Digital", + "技能广场": "Pasar Keterampilan", + "知识库广场": "Pasar Basis Pengetahuan", + "工具广场": "Pasar Alat", + "SOP 广场": "Pasar SOP", + "发布到广场": "Terbitkan ke Pasar", + "从广场复制": "Salin dari Pasar", + "从广场同步": "Sinkron dari Pasar", + "从广场下架": "Lepas dari Pasar", + "浏览开放广场": "Jelajahi Pasar Terbuka", + "暂无开放内容": "Belum Ada Konten Publik", + "暂无匹配的广场内容": "Belum Ada Konten Pasar yang Cocok", + + // Document + "文档": "Dokumen", + "文档标题": "Judul Dokumen", + "文档卡片": "Kartu Dokumen", + "文档详情": "Detail Dokumen", + "文档总数": "Total Dokumen", + "文件": "Berkas", + "文件格式": "Format Berkas", + "文件名不能为空": "Nama berkas tidak boleh kosong", + + // Node / Flow + "节点": "Node", + "节点 {1}": "Node {1}", + "节点 ID": "ID Node", + "节点 ID 不能为空": "ID Node tidak boleh kosong", + "节点类型": "Tipe Node", + "节点说明": "Deskripsi Node", + "节点状态": "Status Node", + "流程节点": "Node Alur", + "流程图": "Bagan Alur", + "流程推进": "Perjalanan Alur", + "终止节点": "Node Terminal", + "起始节点": "Node Awal", + "新增节点": "Tambah Node", + "删除节点": "Hapus Node", + "跳过当前节点": "Lewati Node Saat Ini", + "结束流程": "Akhiri Alur", + "停止流程": "Hentikan Alur", + + // Transition + "流转": "Transisi", + "流转规则": "Aturan Transisi", + "新增流转": "Tambah Transisi", + + // Actions / Buttons + "新建数字员工": "Karyawan Digital Baru", + "新建账号": "Akun Baru", + "新增": "Tambah", + "新增 SOP": "Tambah SOP", + "新增工具": "Tambah Alat", + "新增技能": "Tambah Keterampilan", + "新增第一个节点": "Tambah Node Pertama", + "新增动作": "Tambah Tindakan", + "新增规则": "Tambah Aturan", + "新增任务": "Tambah Tugas", + "移除": "Hapus", + "移除 {1}": "Hapus {1}", + + // Copy + "复制": "Salin", + "复制到": "Salin ke", + "复制到 SOP": "Salin ke SOP", + "复制到技能": "Salin ke Keterampilan", + "复制到知识库": "Salin ke Basis Pengetahuan", + "复制失败": "Gagal Menyalin", + + // Import / Export + "导入": "Impor", + "导入/同步": "Impor / Sinkron", + "导入知识库备份包": "Impor Paket Cadangan Basis Pengetahuan", + "导入知识库备份包失败": "Gagal mengimpor paket cadangan basis pengetahuan", + "导出知识库备份包": "Ekspor Paket Cadangan Basis Pengetahuan", + "导出知识库备份包失败": "Gagal mengekspor paket cadangan basis pengetahuan", + "上传失败": "Gagal Mengunggah", + "上传文件": "Unggah Berkas", + "上传文档即创建知识库": "Unggah Dokumen untuk Membuat Basis Pengetahuan", + + // Run + "运行": "Jalankan", + "运行测试": "Jalankan Uji", + "运行结果": "Hasil Jalankan", + "运行失败": "Jalankan Gagal", + "运行输出": "Keluaran Jalankan", + "运行完成": "Jalankan Selesai", + "立即执行": "Eksekusi Sekarang", + "立即执行失败": "Gagal Eksekusi Sekarang", + "开始运行": "Mulai Jalankan", + "开始": "Mulai", + "停止生成": "Hentikan Pembuatan", + "重新生成": "Buat Ulang", + "生成失败": "Pembuatan Gagal", + "生成完成": "Pembuatan Selesai", + + // Time + "时间": "Waktu", + "时区": "Zona Waktu", + "更新时间": "Waktu Pembaruan", + "创建时间": "Waktu Pembuatan", + "完成时间": "Waktu Selesai", + "执行时间": "Waktu Eksekusi", + "计划时间": "Waktu Terjadwal", + + // Pagination + "页": "Halaman", + "上一页": "Halaman Sebelumnya", + "下一页": "Halaman Berikutnya", + + // Filter + "分类": "Kategori", + "状态": "Status", + "状态筛选": "Filter Status", + "全部": "Semua", + "全部状态": "Semua Status", + + // Profile + "基本信息": "Informasi Dasar", + "基本资料": "Profil Dasar", + "基础信息": "Informasi Dasar", + "描述": "Deskripsi", + "名称": "Nama", + "类型": "Tipe", + "说明": "Deskripsi", + "说明:": "Deskripsi:", + "标题": "Judul", + "内容": "Konten", + "备注": "Catatan", + "详情": "Detail", + + // Misc common + "全部员工": "Semua Karyawan", + "全部会话": "Semua Sesi", + "全部会话 · {1}": "Semua Sesi · {1}", + "今日对话": "Percakapan Hari Ini", + "累计对话": "Total Percakapan", + "差评": "Negatif", + "差评率": "Tingkat Negatif", + "好评": "Positif", + "好评率": "Tingkat Positif", + "反馈": "Umpan Balik", + "反馈数": "Jumlah Umpan Balik", + "点赞": "Suka", + "点踩": "Tidak Suka", + "暂无结果": "Belum Ada Hasil", + "暂无数据": "Belum Ada Data", + "暂无内容": "Belum Ada Konten", + "暂无描述": "Belum Ada Deskripsi", + "暂无说明": "Belum Ada Deskripsi", + "暂无": "Tidak Ada", + "无版本": "Tidak Ada Versi", + "未知": "Tidak Diketahui", + "默认": "Default", + "可选": "Opsional", + "必选": "Wajib", + "全部": "Semua", + "其他": "Lainnya", + "次": "kali", + "条": "item", + "个": "item", + "行": "Baris", + "启用状态": "Status Aktif", + "连接成功": "Koneksi Berhasil", + "连接失败": "Koneksi Gagal", + "在线": "Online", + "暂无可用模型": "Belum Ada Model yang Tersedia", + "加载中…": "Memuat…", + "已保存 {1}": "Tersimpan {1}", + "已复制": "Disalin", + "已移除": "Dihapus", + "已导入": "Diimpor", + "已导出": "Diekspor", + "已上传 {1}": "Diunggah {1}", + "加载失败": "Gagal Memuat", + "刷新失败": "Gagal Menyegarkan", + "加载中": "Memuat", + "加载数字员工档案失败": "Gagal memuat profil karyawan digital", + "加载员工列表失败": "Gagal memuat daftar karyawan", + "加载员工失败": "Gagal memuat karyawan", + "加载员工域失败": "Gagal memuat cakupan karyawan", + "加载知识发现建议失败": "Gagal memuat saran penemuan pengetahuan", + "加载引用来源失败": "Gagal memuat sumber kutipan", + "加载执行记录失败": "Gagal memuat catatan eksekusi", + "加载内部索引失败": "Gagal memuat indeks internal", + "加载 MCP 服务器失败": "Gagal memuat server MCP", + "加载版本失败": "Gagal memuat versi", + "加载版本详情失败": "Gagal memuat detail versi", + "加载定时任务失败": "Gagal memuat tugas terjadwal", + "加载开放广场失败": "Gagal memuat pasar terbuka", + "加载来源 SOP 失败": "Gagal memuat SOP sumber", + "加载来源工具失败": "Gagal memuat alat sumber", + "加载来源技能失败": "Gagal memuat keterampilan sumber", + "加载来源知识库失败": "Gagal memuat basis pengetahuan sumber", + + // Scheduled Tasks + "定时任务": "Tugas Terjadwal", + "定时任务草案": "Draf Tugas Terjadwal", + "定时任务统计": "Statistik Tugas Terjadwal", + "定时任务已保存": "Tugas Terjadwal Tersimpan", + "定时任务已创建": "Tugas Terjadwal Dibuat", + "定时任务已启用": "Tugas Terjadwal Diaktifkan", + "定时任务已暂停": "Tugas Terjadwal Dijeda", + "定时任务执行失败。": "Eksekusi Tugas Terjadwal Gagal.", + "新建空白定时任务": "Tugas Terjadwal Kosong Baru", + "暂无定时任务": "Belum Ada Tugas Terjadwal", + "暂无启用定时任务": "Belum Ada Tugas Terjadwal Aktif", + + // Execution + "执行": "Eksekusi", + "执行并复盘": "Eksekusi dan Tinjau", + "执行规范": "Standar Eksekusi", + "执行计划": "Rencana Eksekusi", + "执行记录": "Catatan Eksekusi", + "执行记录分页": "Paginasi Catatan Eksekusi", + "执行流程": "Alur Eksekusi", + "执行内容": "Konten Eksekusi", + "执行日期": "Tanggal Eksekusi", + "执行失败": "Eksekusi Gagal", + "执行时间": "Waktu Eksekusi", + "执行中": "Sedang Dieksekusi", + "暂无执行记录": "Belum Ada Catatan Eksekusi", + + // Feedback + "反馈提交失败": "Gagal Mengirim Umpan Balik", + "数据复盘": "Tinjauan Data", + "治理与复盘": "Tata Kelola dan Tinjauan", + "留痕复盘": "Audit dan Tinjauan", + + // Login + "登录": "Masuk", + "登录失败": "Gagal Masuk", + "登录中…": "Masuk...", + "退出登录": "Keluar", + "密码": "Kata Sandi", + "密码输入错误": "Input Kata Sandi Salah", + + // Misc specific + "必填信息": "Informasi Wajib", + "必填信息已收集完成": "Informasi Wajib Telah Terkumpul", + "岗位": "Posisi", + "岗位 Prompt": "Prompt Posisi", + "岗位边界": "Batas Posisi", + "岗位描述": "Deskripsi Posisi", + "岗位人设": "Persona Posisi", + "岗位人设已保存": "Persona Posisi Tersimpan", + "岗位执行约束": "Batasan Eksekusi Posisi", + "工作风格": "Gaya Kerja", + "工作记录": "Catatan Kerja", + "工作模式": "Mode Kerja", + "工作状态": "Status Kerja", + "默认头像": "Avatar Default", + "更换头像": "Ganti Avatar", + "设置头像": "Atur Avatar", + "自定义头像": "Kustom Avatar", + "上传自定义头像": "Unggah Avatar Kustom", + "保存数字员工档案失败": "Gagal menyimpan profil karyawan digital", + "保存技能失败": "Gagal menyimpan keterampilan", + + // Feature descriptions (longer strings) + "把业务文档沉淀为知识库,把关键流程拆成节点、必填信息、允许动作和回复规则。": "Simpan dokumen bisnis sebagai basis pengetahuan, pecah alur kunci menjadi node, informasi wajib, tindakan yang diizinkan, dan aturan balasan.", + "把制度、交付文档和服务规范沉淀为知识库,再用引用和反馈持续修正口径。": "Simpan aturan, dokumen pengiriman, dan standar layanan sebagai basis pengetahuan, lalu perbarui terus menerus dengan kutipan dan umpan balik.", + "通过 Trace、反馈、记忆和定时任务沉淀失败原因、稳定口径和长期任务。": "Gunakan Trace, umpan balik, memori, dan tugas terjadwal untuk menyimpan alasan kegagalan, standar yang stabil, dan tugas jangka panjang.", + + // Misc longer strings (partial coverage for the most common) + "当前浏览器不支持流式响应": "Browser ini tidak mendukung respons streaming", + "当前浏览器无法处理头像图片": "Browser ini tidak dapat memproses gambar avatar", + "当前没有内容变化": "Tidak ada perubahan konten", + "当前员工暂无本地 SOP": "Belum ada SOP lokal untuk karyawan saat ini", + "当前员工暂无工具": "Belum ada alat untuk karyawan saat ini", + "当前员工暂无技能": "Belum ada keterampilan untuk karyawan saat ini", + "当前员工暂无知识库": "Belum ada basis pengetahuan untuk karyawan saat ini", + "还没有数字员工": "Belum Ada Karyawan Digital", + "暂无数字员工": "Belum Ada Karyawan Digital", + "我们来做什么?": "Hari ini kita akan membuat apa?", + "几步搭好你的数字员工": "Buat karyawan digital Anda dalam beberapa langkah", + "开始使用": "Mulai Menggunakan", + "快速开始": "Mulai Cepat", + "退出登录": "Keluar", + "个人档案分区": "Bagian Profil Pribadi", + "去配置": "Konfigurasi", + "配置模型": "Konfigurasi Model", + "稍后配置": "Konfigurasi Nanti", + "去对话": "Buka Chat", + "去工具页": "Ke Halaman Alat", + "打开测试页": "Buka Halaman Uji", + "打开模型管理": "Buka Manajemen Model", + "返回对话": "Kembali ke Percakapan", + "返回工具": "Kembali ke Alat", + "返回技能": "Kembali ke Keterampilan", + "返回定时任务": "Kembali ke Tugas Terjadwal", + "返回开放广场": "Kembali ke Pasar Terbuka", + "切换到对话端": "Beralih ke Chat", + "切换到管理端": "Beralih ke Admin", + "显示密码": "Tampilkan Kata Sandi", + "隐藏密码": "Sembunyikan Kata Sandi", + "重命名": "Ganti Nama", + "重命名会话": "Ganti Nama Sesi", + "重命名文件": "Ganti Nama Berkas", + "展开": "Perluas", + "收起": "Ciutkan", + "展开边栏": "Perluas Sidebar", + "收起边栏": "Ciutkan Sidebar", + "全选": "Pilih Semua", + "清空选择": "Hapus Pilihan", + "加载中…": "Memuat…", + "请填写必填项": "Harap isi semua kolom wajib", + "请求失败": "Permintaan Gagal", + "未知时间": "Waktu Tidak Diketahui", + "已从广场同步": "Tersinkron dari Pasar", + "已从广场下架": "Lepas dari Pasar", + "已从广场移除": "Dihapus dari Pasar", + + // Days of week + "周一": "Senin", + "周二": "Selasa", + "周三": "Rabu", + "周四": "Kamis", + "周五": "Jumat", + "周六": "Sabtu", + "周日": "Minggu", + + // Frequency + "每天": "Setiap Hari", + "每周": "Mingguan", + "每月": "Bulanan", + "一次性": "Sekali Pakai", + + // Misc + "价格对比": "Perbandingan Harga", + "订单查询": "Pencarian Pesanan", + "订单确认": "Konfirmasi Pesanan", + "资格查询": "Pencarian Kelayakan", + "报销核对": "Verifikasi Pengeluaran", + "会议纪要": "Notulensi Rapat", + "事务跟进": "Tindak Lanjut", + "周报": "Laporan Mingguan", + "数据复盘": "Tinjauan Data", + "架构概览": "Ikhtisar Arsitektur", + "架构说明": "Panduan Arsitektur", + "开发指南": "Panduan Pengembang", + "快速开始": "Mulai Cepat", + "安装说明": "Panduan Instalasi", + "安装与入口": "Instalasi dan Akses", + "项目简介": "Ringkasan Proyek", + "常见问题": "FAQ", + "常见问题排查": "Pemecahan Masalah", + "核心功能": "Fitur Inti", + "核心模块": "Modul Inti", + "核心执行流程": "Alur Eksekusi Inti", + "推荐场景": "Skenario yang Direkomendasikan", + "内置 Demo": "Demo Bawaan", + "内置能力": "Kemampuan Bawaan", + "外部能力": "Kemampuan Eksternal", + "能力总览": "Ikhtisar Kemampuan", + "可复用能力": "Kemampuan yang Dapat Digunakan Kembali", + "能力复用": "Penggunaan Kembali Kemampuan", + "角色": "Peran", + "人": "Orang", + "全部": "Semua", + "最近": "Terbaru", + "最近更新": "Pembaruan Terakhir", + "最近结果": "Hasil Terakhir", + "最近内容": "Konten Terakhir", + "最后更新:": "Pembaruan Terakhir:", + "来源": "Sumber", + "来源:": "Sumber:", + "来源文档": "Dokumen Sumber", + "来自 {1}": "Dari {1}", + "平台": "Platform", + "优先级": "Prioritas", + "格式": "Format", + "图片": "Gambar", + "文本": "Teks", + "字段": "Bidang", + "行": "Baris", + "结果": "Hasil", + "摘要": "Ringkasan", + "摘要": "Ringkasan", + "链接": "Tautan", + "链接": "Tautan", + "主页链接": "Tautan Beranda", + "条件": "Kondisi", + "目标": "Target", + "计划": "Rencana", + "角色": "Peran", + "主题": "Topik", + "章节": "Bab", + "段": "Bagian", + "摘要": "Ringkasan", + "摘要": "Ringkasan", + "提示": "Tips", + "添加": "Tambah", + "状态:": "Status:", + "已默认": "Default", + "暂无内容变化,无需保存草稿。": "Tidak ada perubahan konten, tidak perlu menyimpan draf.", + "正在处理": "Sedang Diproses", + "正在处理...": "Sedang Diproses...", + "正在加载待回答消息": "Memuat pesan yang menunggu balasan", + "正在运行技能...": "Menjalankan keterampilan...", + "正在思考": "Berpikir", + "正在执行": "Sedang Dieksekusi", + "正在生成 SOP 草稿": "Membuat draf SOP", + "正在反思": "Merefleksikan", + "请输入密码(首次使用请输入admin)": "Masukkan kata sandi (untuk penggunaan pertama masukkan admin)", + "请输入账号(首次使用请输入admin)": "Masukkan akun (untuk penggunaan pertama masukkan admin)", + "账号输入错误": "Input Akun Salah", + "暂无结构差异": "Tidak Ada Perbedaan Struktur", + "暂无缺口": "Tidak Ada Kekurangan", + "暂无缺口": "Tidak Ada Kekurangan", + "已确认改写": "Rewrite Dikonfirmasi", + "已拒绝改写并还原": "Rewrite Ditolak dan Dikembalikan", + "已停止改写": "Rewrite Dihentikan", + "已完成改写。": "Rewrite Selesai.", + "已重新提交后台分析": "Analisis Background Diajukan Ulang", + "已触发后台执行": "Eksekusi Background Dipicu", + "已创建独立任务会话,后台开始执行": "Sesi tugas independen dibuat; eksekusi background dimulai", + "生成连接已断开,后端任务仍可继续。": "Koneksi pembuatan terputus, tugas backend masih dapat dilanjutkan.", + "已加入发送队列": "Masuk Antrian Pengiriman", + "排队内容过大,刷新页面后可能无法恢复": "Konten antrian terlalu besar untuk dipulihkan setelah menyegarkan halaman", + "当前没有可用模型。完成配置并通过连通性测试后,才能发送对话和执行任务。": "Belum ada model yang tersedia. Setelah konfigurasi lulus uji koneksi, Anda dapat mengirim percakapan dan menjalankan tugas.", + "还没有可用模型配置,数字员工暂不能调用模型。请先完成模型配置。": "Belum ada konfigurasi model yang tersedia, karyawan digital belum dapat memanggil model. Harap selesaikan konfigurasi model terlebih dahulu.", + "系统管理员尚未配置可用模型,数字员工暂不能调用模型。请联系管理员完成模型配置。": "Administrator sistem belum mengkonfigurasi model yang tersedia, karyawan digital belum dapat memanggil model. Silakan hubungi administrator untuk menyelesaikan konfigurasi model.", + "Enter 发送 / Shift+Enter 换行": "Enter untuk kirim / Shift+Enter untuk baris baru", + ",{1} 个未复制": ", {1} tidak disalin", + ",包含 {1}": ", termasuk {1}", + ",跳过 {1} 个无法读取文件": ", melewati {1} file yang tidak dapat dibaca", + "· 差评": "· Negatif", + "· 广场": "· Marketplace", + "· 优先级 {1}": "· Prioritas {1}", + "· 置信度": "· Keyakinan", + "{1} · {2} 调用能力": "{1} · {2} panggilan kemampuan", + "{1} · 到{2}": "{1} · sampai {2}", + "{1} · 默认": "{1} · Default", + "{1} 次": "Jalankan: {1}", + "{1} 次调用": "Panggilan: {1}", + "{1} 个": "{1}", + "{1} 个引用来源,覆盖 {2}": "{1} Sumber Sitasi, mencakup {2}", + "{1} 个引用来源,已完成桶级映射。": "{1} sumber sitasi dengan pemetaan bucket selesai.", + "{1} 个知识图谱,覆盖 {2}{3}": "{1} Knowledge Graph, mencakup {2}{3}", + "{1} 条{2}流转": "{1} Transisi {2}", + "{1} 文档 / {2} 目录 / {3} 引用": "{1} Dokumen / {2} Direktori / {3} Sitasi", + "{1} 至 {2}": "{1} hingga {2}", + "{1},负责接收任务、调用知识库、执行 SOP 并沉淀对话质量反馈。": "{1} menangani tugas yang masuk, mengakses basis pengetahuan, menjalankan SOP, dan menyimpan umpan balik kualitas percakapan.", + "{1}分页": "{1} Paginasi", + "{1}工具「{2}」?": "Tool \"{2}\" {1}?", + "{1}技能「{2}」?": "Skill \"{2}\" {1}?", + "{1}筛选": "Filter {1}", + "{1}统计": "Statistik {1}", + "{1}位在线": "{1} online", + "{1}员工头像": "Avatar karyawan {1}", + "{1}月": "{1} Bulan", + "{1}知识库:{2}": "Basis Pengetahuan {1}: {2}", + "」,用于验证员工实际可用的工具工具返回。": "\", digunakan untuk memverifikasi respons tool yang benar-benar tersedia bagi karyawan.", + "# 技能说明 在这里编写技能文档。名称、Slug 和描述由上方表单维护,系统不会从文档中自动抽取。": "# Deskripsi Skill Tulis dokumentasi skill di sini. Nama, Slug, dan deskripsi dikelola melalui formulir di atas, sistem tidak akan mengekstrak dari dokumen ini.", + "## 详细节点": "## Node Detail", + "### 节点 {1}: {2}": "### Node {1}: {2}", + "#角色:{1}「{2}」一名经验丰富的{3}": "# Peran: {1} \"{2}\", seorang {3} yang berpengalaman", + "0位在线": "0 online", + "按目录结构组织知识范围,先看主题,再进入知识图谱。": "Atur cakupan pengetahuan berdasarkan struktur direktori: lihat topik terlebih dahulu, lalu buka knowledge graph.", + "按相关性选择内部索引": "Pilih Indeks Internal berdasarkan Relevansi", + "按相关性选择知识库文档": "Pilih Dokumen Basis Pengetahuan berdasarkan Relevansi", + "案例展示": "Contoh", + "把结果变成运营资产": "Ubah hasil menjadi aset operasional", + "把浏览器、查询、文档处理、MCP 或项目工作流沉淀为技能,让能力能被多个员工复用和迭代。": "Jadikan alur kerja browser, kueri, pemrosesan dokumen, MCP, atau proyek sebagai skill agar dapat digunakan berulang dan dikembangkan oleh beberapa karyawan.", + "把用户偏好、项目背景、复盘结论和协作习惯沉淀为可查记录,帮助后续会话继承已验证的上下文。": "Simpan preferensi pengguna, konteks proyek, kesimpulan retro, dan kebiasaan kolaborasi sebagai catatan yang dapat dicari, sehingga percakapan berikutnya dapat mewarisi konteks yang sudah diverifikasi.", + "把制度、商品、交付和服务口径解析为可检索片段,回复时保留引用线索,降低“听起来对但查不到来源“的风险。": "uraikan kebijakan, produk, pengiriman, dan standar layanan menjadi potongan yang dapat dicari, pertahankan jejak sitasi saat membalas, sehingga risiko \"terdengar benar tapi tidak bisa dilacak sumbernya\" berkurang.", + "保留切片内容、原文片段和来源路径,用于回答溯源。": "Simpan isi potongan, kutipan asli, dan jalur sumber untuk pelacakan jawaban.", + "本次响应连接中断,未能确认服务端会话。请重试发送。": "Koneksi terputus dan sesi server tidak dapat dikonfirmasi. Silakan coba kirim ulang.", + "本次响应同步超时,请重试发送。": "Sinkronisasi respons habis waktu. Silakan coba kirim ulang.", + "本地 SOP": "SOP Lokal", + "本地版本": "Versi Lokal", + "本地版本从 {1} 进化到 {2}": "Versi Lokal dari {1} berevolusi ke {2}", + "本轮修改 diff": "Perubahan dalam Putaran Ini", + "必要时转人工": "Serahkan ke Manusia jika Diperlukan", + "并行": "Paralel", + "并行执行 ·": "Eksekusi Paralel ·", + "并行执行 · {1}": "Eksekusi Paralel · {1}", + "补齐信息": "Lengkapi Informasi", + "补齐知识与 SOP": "Lengkapi Pengetahuan dan SOP", + "不保存,继续导入": "Jangan simpan, Lanjutkan Impor", + "不保存清空": "Kosongkan tanpa Menyimpan", + "不是通用 Agent 框架,而是面向业务流程的企业对话运行时": "Bukan framework Agent umum, melainkan runtime percakapan perusahaan untuk alur kerja bisnis.", + "不填为无限制": "Kosongkan untuk Tidak Terbatas", + "不限制": "Tidak Terbatas", + "不修改请留空": "Kosongkan jika tidak ingin mengubah", + "不要只用标准话术测试,要用用户真实表达覆盖缺信息、信息已给全、改口、插话和转人工。": "Uji dengan bahasa pengguna yang nyata, termasuk informasi kurang, informasi lengkap, koreksi, interupsi, dan serahkan ke manusia, jangan hanya menggunakan skrip standar.", + "步运行闭环": "Siklus Eksekusi Langkah", + "步骤 {1}": "Langkah {1}", + "部分对话日志数据加载失败": "Gagal memuat sebagian data log percakapan", + "财": "F", + "财务": "Keuangan", + "财务员工": "Karyawan Keuangan", + "参考与案例": "Referensi dan Contoh", + "查规则": "Cari Aturan", + "查询": "Kueri", + "查询:{1}": "Kueri: {1}", + "查询分析": "Analisis Kueri", + "查询失败": "Kueri Gagal", + "查询资料": "Cari Pengetahuan", + "查资料": "Cari Pengetahuan", + "拆解步骤": "Rincikan Langkah", + "成长记录": "Catatan Perkembangan", + "澄清问题": "Klarifikasi Masalah", + "澄清用户需求": "Klarifikasi Kebutuhan Pengguna", + "持续沉淀": "Pembelajaran Berkelanjutan", + "持续跟踪": "Pelacakan Terus-Menerus", + "抽取 / 回忆 / 复用": "Ekstrak / Ingat / Gunakan Kembali", + "出发": "Mulai", + "初始密码": "Sandi Awal", + "触发意图": "Picu Niat", + "创建你的第一位数字员工,为它配置知识库、技能与工具,即可开始接管对话与任务。": "Buat karyawan digital pertama Anda, konfigurasikan basis pengetahuan, skill, dan tool-nya, lalu mulai menangani percakapan dan tugas.", + "从": "dari", + "从当前员工移除后,工具广场中的原始工具不会被删除。": "Menghapus tool dari karyawan saat ini tidak akan menghapus tool asli dari Tool Marketplace.", + "从广场复制 SOP": "Salin SOP dari Marketplace", + "从广场复制到当前数字员工的 SOP。": "Salin SOP dari Marketplace ke karyawan digital saat ini.", + "从广场复制到当前数字员工的技能。": "Salin skill dari Marketplace ke karyawan digital saat ini.", + "从广场复制到当前数字员工的知识库。": "Salin basis pengetahuan dari Marketplace ke karyawan digital saat ini.", + "从广场复制工具": "Salin tool dari Marketplace", + "从广场复制技能": "Salin skill dari Marketplace", + "从广场复制知识库": "Salin basis pengetahuan dari Marketplace", + "从开放广场复制可用 SOP;不可复制内容不会出现在列表。": "Salin SOP yang tersedia dari Marketplace. Item yang tidak dapat disalin tidak akan muncul di daftar.", + "从开放广场复制可用工具;复制后会成为当前员工的本地工具绑定。": "Salin tool yang tersedia dari Marketplace dan kaitkan secara lokal ke karyawan saat ini.", + "从开放广场复制可用技能;不会覆盖当前编辑区内容。": "Salin skill yang tersedia dari Marketplace tanpa menimpa isi editor saat ini.", + "从开放广场复制可用技能;不可复制内容不会出现在列表。": "Salin skill yang tersedia dari Marketplace. Item yang tidak dapat disalin tidak akan muncul di daftar.", + "从开放广场复制可用知识库;不可复制内容不会出现在列表。": "Salin basis pengetahuan yang tersedia dari Marketplace. Item yang tidak dapat disalin tidak akan muncul di daftar.", + "从开源平台导入": "Impor dari Platform Open-Source", + "从开源平台导入技能": "Impor Skill dari Platform Open-Source", + "从开源平台导入失败": "Gagal Impor dari Platform Open-Source", + "从空白开始": "Mulai dari Nol", + "从空白开始创建,不继承任何已有配置。": "Mulai dari nol tanpa mewarisi konfigurasi yang ada.", + "从空系统到一个可复盘员工": "Dari Sistem Kosong hingga Karyawan yang Dapat Ditinjau", + "从数字员工复制": "Salin dari Karyawan Digital", + "从数字员工复制 SOP": "Salin SOP dari karyawan digital", + "从数字员工复制工具": "Salin tool dari karyawan digital", + "从数字员工复制技能": "Salin skill dari karyawan digital", + "从数字员工复制可用 SOP;不可见内容不会出现在列表。": "Salin SOP yang tersedia dari karyawan lain. Item yang tidak terlihat tidak akan muncul di daftar.", + "从数字员工复制可用工具;不可见内容不会出现在列表。": "Salin tool yang tersedia dari karyawan lain. Item yang tidak terlihat tidak akan muncul di daftar.", + "从数字员工复制可用技能;不会覆盖当前编辑区内容。": "Salin skill yang tersedia dari karyawan digital lain tanpa menimpa isi editor saat ini.", + "从数字员工复制可用技能;不可见内容不会出现在列表。": "Salin skill yang tersedia dari karyawan lain. Item yang tidak terlihat tidak akan muncul di daftar.", + "从数字员工复制可用知识库;不可见内容不会出现在列表。": "Salin basis pengetahuan yang tersedia dari karyawan lain. Item yang tidak terlihat tidak akan muncul di daftar.", + "从数字员工复制知识库": "Salin basis pengetahuan dari karyawan digital", + "从用户消息到最终回复,中间的每一步都应该能在日志和 Trace 中找到证据。": "Setiap langkah dari pesan pengguna hingga balasan akhir harus memiliki bukti di log dan Trace.", + "错误输出": "Output Kesalahan", + "达标": "Memenuhi Target", + "打开原会话": "Buka Percakapan Asli", + "大多数问题可以落到模型、知识、SOP、工具、权限和 Trace 六个层面定位。": "Sebagian besar masalah dapat ditelusuri melalui enam lapisan: model, pengetahuan, SOP, tool, izin, dan Trace.", + "代表引用": "Sitasi Perwakilan", + "代表引用来源,可在详情中查看来源映射。": "Sumber sitasi perwakilan. Buka Detail untuk melihat pemetaan sumber.", + "代码检索": "Pencarian Kode", + "待补充岗位": "Peran Belum Diatur", + "待补充职位": "Posisi Belum Diatur", + "待补足": "Belum Lengkap", + "待分析": "Menunggu Analisis", + "待改进 SOP": "SOP yang Perlu Diperbaiki", + "待回答": "Menunggu Balasan", + "待回答 {1}": "Menunggu Balasan {1}", + "待回答加载失败": "Gagal memuat menunggu balasan", + "待确认时间": "Waktu Menunggu Konfirmasi", + "待完成": "Menunggu Penyelesaian", + "待新增": "Menunggu Penambahan", + "单轮最大动作数": "Maksimum Aksi per Putaran", + "当前": "Saat Ini", + "当前 SOP 将切换为「{1}」的 {2} 版本内容,历史对话和反馈数据不会被删除。": "SOP saat ini akan beralih ke versi {2} dari \"{1}\". Riwayat percakapan dan data umpan balik tidak akan dihapus.", + "当前 Step": "Langkah Saat Ini", + "当前版本": "Versi Saat Ini", + "当前步骤 {1}": "Langkah Saat Ini {1}", + "当前仓库由后端服务、企业端控制台和对话端组成。企业端负责配置,对话端负责使用,后端运行对话、知识、工具和任务。": "Repository ini terdiri dari layanan backend, konsol perusahaan, dan antarmuka chat. Konsol mengonfigurasi, chat digunakan, dan backend menjalankan percakapan, pengetahuan, tool, dan tugas.", + "当前差评率": "Tingkat Negatif Saat Ini", + "当前分类还没有可用员工": "Kategori saat ini belum memiliki karyawan yang tersedia", + "当前工具配置中暂无描述": "Tidak ada deskripsi untuk konfigurasi tool saat ini", + "当前还没有可管理的数字员工,创建一位或从开放广场复制已发布的配置作为起点。": "Belum ada karyawan digital yang dapat dikelola. Buat satu atau salin konfigurasi yang sudah dipublikasikan dari Marketplace sebagai titik awal.", + "当前好评率": "Tingkat Positif Saat Ini", + "当前技能": "Skill Saat Ini", + "当前技能没有未保存变更,确认清空当前改写内容和对话记录?": "Tidak ada perubahan skill yang belum disimpan. Kosongkan isi rewrite dan riwayat percakapan saat ini?", + "当前节点是终止节点,默认流程结束。": "Ini adalah node terminal; alur berakhir di sini secara default.", + "当前没有内容变化,无需保存草稿。": "Tidak ada perubahan untuk disimpan sebagai draf.", + "当前员工下你的长期记忆": "Memori Jangka Panjang Anda untuk Karyawan Saat Ini", + "当前员工暂无用户记忆;新的对话记忆会按员工和用户隔离沉淀。": "Karyawan ini belum memiliki memori pengguna. Memori percakapan baru disimpan secara terpisah berdasarkan karyawan dan pengguna.", + "当前租户下你的长期记忆": "Memori Jangka Panjang Anda untuk Penyewa Saat Ini", + "档案 / 资源 / 权限": "Profil / Sumber Daya / Izin", + "导入后会生成知识图谱、知识索引和引用来源。": "Impor akan menghasilkan knowledge graph, indeks pengetahuan, dan sumber sitasi.", + "导入新技能前是否保存当前技能?": "Simpan skill saat ini sebelum mengimpor yang baru?", + "等待调用": "Menunggu Panggilan", + "等待分析": "Menunggu Analisis", + "等待确认后启用": "Aktifkan setelah konfirmasi.", + "第 {1} 次 Python runner": "Percobaan Python Runner {1}", + "点击「发现工具」后,这里会列出该 MCP Server 提供的工具。": "Klik \"Temukan Tool\" untuk menampilkan daftar tool yang disediakan oleh MCP Server ini.", + "点击「发现工具」拉取 tools/list,勾选后「导入/同步」即可生成工具行。": "Klik \"Temukan Tool\" untuk mengambil tools/list, centang, lalu pilih \"Impor / Sinkron\" untuk membuat entri tool.", + "点击调用后,这里会显示工具返回、错误信息和原始 data。": "Setelah memanggil tool, respons, pesan kesalahan, dan data mentah akan muncul di sini.", + "点击左下角「新建数字员工」开始创建,或前往员工广场选择已发布的员工。": "Klik \"Karyawan Digital Baru\" di pojok kiri bawah, atau pilih karyawan yang sudah dipublikasikan dari Employee Marketplace.", + "电商导购员工": "Asisten Perdagangan", + "调度类型": "Jenis Jadwal", + "调用": "Panggil", + "调用 SOP": "Panggil SOP", + "调用测试": "Uji Panggilan", + "调用次数": "Jumlah Panggilan", + "调用地址": "Endpoint", + "调用工具": "Panggil Tool", + "调用工具:{1}": "Panggil Tool: {1}", + "调用结果": "Hasil Panggilan", + "调用排行": "Peringkat Panggilan", + "调用权限": "Izin Panggilan", + "调用失败": "Panggilan Gagal", + "调用已保存的「": "Panggil \"", + "调整筛选条件,或换个关键词再试试": "Sesuaikan filter, atau coba kata kunci lain.", + "定时任务 -> 运行记录 -> 记忆沉淀 -> 下轮复用": "Tugas Terjadwal -> Catatan Jalankan -> Penyimpanan Memori -> Gunakan Kembali di Putaran Berikutnya", + "定时任务「{1}」已启用": "Tugas Terjadwal \"{1}\" Diaktifkan", + "定时任务把周期工作常驻化": "Tugas terjadwal membuat pekerjaan berulang menjadi permanen", + "定义一个真实岗位": "Tentukan Peran Nyata", + "动作": "Aksi", + "动作可追溯": "Aksi yang Dapat Dilacak", + "读取 {1} 个片段": "Membaca {1} potongan", + "读取来源": "Baca Sumber", + "读取失败": "Gagal Membaca", + "读取文件失败": "Gagal membaca file", + "读取引用来源": "Baca Sumber Sitasi", + "读取运行结果": "Baca Hasil Jalankan", + "读取知识库": "Baca Basis Pengetahuan", + "读取中": "Membaca", + "端点": "Endpoint", + "对话端承接真实用户表达;企业端负责配置、运营和复盘。": "Chat menangani ekspresi pengguna nyata; konsol perusahaan menangani konfigurasi, operasi, dan tinjauan.", + "对话日志记录每轮输入输出": "Log percakapan mencatat input dan output setiap putaran.", + "多": "Banyak", + "发布到广场的知识库,可复制到你的数字员工。": "Basis pengetahuan yang dipublikasikan ke Marketplace dapat disalin ke karyawan digital Anda.", + "发布内容后会在这里展示": "Konten yang dipublikasikan akan muncul di sini.", + "发布失败": "Gagal Publikasi", + "发现 {1} 个待处理建议": "Ditemukan {1} Saran yang Perlu Ditangani", + "发现 {1} 个工具": "Ditemukan {1} Tool", + "发现 SOP/工具": "Temukan SOP/Tool", + "发现/同步": "Temukan/Sinkron", + "发现的工具": "Tool yang Ditemukan", + "发现工具": "Temukan Tool", + "发现工具失败": "Gagal Menemukan Tool", + "发现可新增资源": "Temukan Sumber Daya yang Dapat Ditambahkan", + "法": "L", + "法务员工": "Karyawan Legal", + "反馈分析定位失败原因": "Gunakan Analisis Umpan Balik untuk Mengidentifikasi Penyebab Kegagalan", + "反思并修正": "Tinjau dan Koreksi", + "反思后继续尝试": "Coba Lagi setelah Tinjauan", + "反思检查": "Pemeriksaan Refleksi", + "反思轮数": "Putaran Refleksi", + "反思轮数与单轮最大动作数必须是数字": "Putaran refleksi dan maksimum aksi per putaran harus berupa angka.", + "反思通过": "Tinjauan Lulus", + "反思修复": "Perbaikan Refleksi", + "反思已关闭": "Refleksi Dinonaktifkan", + "方法:": "Metode:", + "放大": "Perbesar", + "非 GET 请求会把这里的 JSON 作为请求体发送;仅 URL 查询串不会变成请求 Body。": "Untuk permintaan non-GET, JSON ini dikirim sebagai body permintaan. String query URL saja tidak akan menjadi body permintaan.", + "分桶": "Bucket", + "分桶筛选": "Filter Bucket", + "分析失败": "Analisis Gagal", + "风险克制": "Peka Risiko", + "负责报销核对、预算口径、财务资料检索和风险提示。": "Menangani verifikasi pengembalian, standar anggaran, pencarian data keuangan, dan peringatan risiko.", + "负责会议纪要、资料归档、跨部门事务跟进和结果同步。": "Menangani notulensi rapat, pengarsipan dokumen, tindak lanjut lintas departemen, dan sinkronisasi hasil.", + "负责研发资料查询、代码任务拆解、SOP 执行和交付记录沉淀。": "Menangani pencarian data riset & pengembangan, perincian tugas kode, eksekusi SOP, dan pencatatan pengiriman.", + "负责知识库检索、资料结构化归档、信息核对和答案沉淀。": "Menangani pencarian basis pengetahuan, pengarsipan dokumen terstruktur, verifikasi informasi, dan penyimpanan jawaban.", + "复制工具失败": "Gagal menyalin tool", + "复制技能失败": "Gagal menyalin skill", + "复制来源": "Salin Sumber", + "复制知识库失败": "Gagal menyalin basis pengetahuan", + "覆盖来源": "Timpa Sumber", + "该工具不是可新增候选": "Tool ini bukan kandidig yang memenuhi syarat untuk ditambahkan.", + "该任务没有绑定数字员工,请新建任务后再发送": "Tugas ini belum memiliki karyawan digital yang ditugaskan. Buat tugas baru sebelum mengirim.", + "改进项:": "Perbaikan:", + "改写:{1}": "Rewrite: {1}", + "改写范围:{1}": "Cakupan Rewrite: {1}", + "改写失败": "Rewrite Gagal", + "改写失败,当前草稿未变更。": "Rewrite gagal. Draf saat ini tidak berubah.", + "改写失败,已保留当前草稿": "Rewrite gagal. Draf saat ini tetap dipertahankan.", + "改写完成": "Rewrite selesai", + "概括这个数字员工的岗位边界、服务风格和执行重点": "Ringkas batasan peran, gaya layanan, dan fokus eksekusi karyawan digital ini.", + "概念": "Konsep", + "岗位边界清楚,知道它能处理什么、不能处理什么。": "Batasan peran jelas, mengetahui apa yang bisa dan tidak bisa ditangani.", + "个工具": "Tool", + "个链接": "Tautan", + "个切片": "Potongan", + "个文件 ·": "File ·", + "个引用": "Sitasi", + "个引用来源": "Sumber Sitasi", + "给答案": "Jawab", + "给结论": "Kesimpulkan", + "更新": "Perbarui", + "更新定时任务失败": "Gagal memperbarui tugas terjadwal", + "更新广场状态失败": "Gagal memperbarui status marketplace", + "更新员工状态失败": "Gagal memperbarui status karyawan", + "工具 {1}": "Tool {1}", + "工具 ID": "ID Tool", + "工具:参数 schema 可验证,测试调用有结果。": "Tool: skema parameter dapat diverifikasi, Uji Panggilan menghasilkan hasil.", + "工具「{1}」尚未测试通过": "Tool \"{1}\" belum lulus pengujian.", + "工具测试失败:{1}{2}": "Uji Tool Gagal: {1}{2}", + "工具调用不可控": "Panggilan Tool Tidak Terkontrol", + "工具调用可验证,参数和结果都能复盘。": "Panggilan tool dapat diverifikasi, parameter dan hasilnya dapat ditinjau.", + "工具发现(tools/list)": "Penemuan Tool (tools/list)", + "工具没有被调用怎么办?": "Bagaimana jika tool tidak dipanggil?", + "工作目录(cwd)": "Direktori Kerja (cwd)", + "功能开发时保持一个原则:配置变更要能被运行验证,运行失败要能被 Trace 解释。": "Patuhi satu prinsip saat mengembangkan fitur: perubahan konfigurasi harus dapat diverifikasi saat dijalankan, dan kegagalan harus dapat dijelaskan melalui Trace.", + "共 {1} 个引用来源,当前暂无可展示的桶级代表来源。": "{1} sumber sitasi secara total. Belum ada sumber perwakilan bucket yang dapat ditampilkan.", + "构建前端,并挂载对话端、企业端和 API。": "Bangun frontend, dan pasang Chat, konsol perusahaan, dan API.", + "挂起SOP": "Tangguhkan SOP", + "关联页面": "Halaman Terkait", + "观测层": "Lapisan Observabilitas", + "管理端": "Admin", + "管理已有知识库": "Kelola Basis Pengetahuan yang Sudah Ada", + "管理员": "Administrator", + "广": "M", + "广场沉淀的知识库。": "Basis Pengetahuan Marketplace.", + "广场开放的数字员工。": "Karyawan Digital Marketplace.", + "广场暂无可用数字员工": "Belum ada karyawan digital yang tersedia di Marketplace.", + "规范化原始资料": "Normalisasi Sumber Data", + "规划知识图谱": "Perencanaan Graf Pengetahuan", + "规则名称": "Nama Aturan", + "还没有后续节点,请新增流转规则。": "Belum ada node berikutnya, tambahkan aturan transisi.", + "还有必填信息没有收集到时进入": "Masuk saat informasi wajib belum terkumpul", + "好评 SOP": "SOP Penilaian Positif", + "和 Node": "dan Node", + "核凭证": "Verifikasi Dokumen", + "核心功能不是散点,而是一套员工运行系统": "Fitur inti merupakan satu sistem operasi karyawan, bukan fitur terpisah-pisah.", + "后台常驻": "Selalu Aktif", + "后台运行": "Jalankan di Latar Belakang", + "候选 {1} 个": "Kandidat {1}", + "忽略": "Abaikan", + "唤醒计划": "Jadwal Aktivasi", + "换个关键词,或切换员工分类再试试": "Coba kata kunci lain, atau ganti kategori karyawan.", + "恢复生成失败": "Gagal Melanjutkan Pembuatan", + "恢复SOP": "Lanjutkan SOP", + "回复并恢复": "Balas dan Lanjutkan", + "回复规则": "Aturan Balasan", + "回复生成": "Pembuatan Balasan", + "回滚": "Gulung Balik", + "回滚到版本 {1}?": "Gulung Balik ke Versi {1}?", + "回滚到此版本": "Gulung Balik ke Versi Ini", + "回滚失败": "Gagal Menggulung Balik", + "回退失败": "Gagal Mengembalikan", + "汇集所有可共享的 SOP、知识库、技能和工具,新建数字员工时可以从这里复制配置作为起点。": "Kumpulkan semua SOP, basis pengetahuan, keterampilan, dan alat yang bisa dibagikan. Saat membuat karyawan digital baru, Anda bisa menyalin konfigurasi dari sini sebagai titik awal.", + "及时追问": "Tanyakan Tindak Lanjut Segera", + "计划 / 执行 / 历史": "Rencana / Eksekusi / Riwayat", + "计划:{1}": "Rencana: {1}", + "计划类型": "Jenis Rencana", + "记忆沉淀长期偏好和复盘结论": "Memori Menyimpan Preferensi Jangka Panjang dan Kesimpulan Evaluasi", + "技能 {1}": "Keterampilan {1}", + "技能 ID": "ID Keterampilan", + "继续到 {1}": "Lanjutkan ke {1}", + "继续流程": "Lanjutkan Alur", + "继续追问用户": "Lanjutkan Bertanya ke Pengguna", + "剪贴板文件": "File Papan Klip", + "检测到当前 SOP 有未保存变更。你可以先保存当前内容;清空后会进入新的 SOP 草稿工作台,不会把原 SOP 替换为空。": "SOP saat ini memiliki perubahan yang belum disimpan. Simpan dulu jika diperlukan. Mengosongkan akan membuka workspace draf SOP baru dan tidak menggantikan SOP asli dengan yang kosong.", + "检查 API Key、Base URL 是否包含 `/v1`、模型 ID、余额和网络。先让默认模型测试通过,再验证对话端。": "Periksa API Key, apakah Base URL mengandung `/v1`, ID model, saldo, dan jaringan. Pastikan model uji default berhasil dulu, lalu validasi sisi percakapan.", + "检查 SOP 节点 allowed_actions、工具启用状态、参数 schema 和当前员工绑定关系。": "Periksa allowed_actions node SOP, status aktivasi alat, schema parameter, dan pengikatan karyawan saat ini.", + "检查节点 instruction、expected_user_info 和槽位抽取策略,确保已满足信息会被跳过。": "Periksa instruksi node, expected_user_info, dan strategi ekstraksi slot agar informasi yang sudah terpenuhi dilewati.", + "检查文档解析状态、知识库是否绑定到当前员工,以及问题是否覆盖文档中的关键概念。": "Periksa status parsing dokumen, apakah basis pengetahuan terikat ke karyawan saat ini, dan apakah pertanyaan mencakup konsep kunci dalam dokumen.", + "检索": "Retrieval", + "检索阶段": "Fase Retrieval", + "检索知识": "Ambil Pengetahuan", + "检索知识库": "Retrieval Basis Pengetahuan", + "检索中…": "Sedang mengambil…", + "检索资料": "Ambil Data", + "简单说明这个工具的用途": "Jelaskan secara singkat tujuan alat ini", + "简单说明这个工具集的用途": "Jelaskan secara singkat tujuan set alat ini", + "建立运行底座": "Bangun Fondasi Operasional", + "建议新增工具:{1}": "Alat yang Disarankan: {1}", + "渐进检索调试": "Debug Retrieval Bertahap", + "将「{1}」发布到广场?": "Terbitkan \"{1}\" ke Marketplace?", + "将清空{1},不会影响其他用户。确定继续?": "Ini akan mengosongkan {1}, tanpa mempengaruhi pengguna lain. Lanjutkan?", + "将受影响的连接": "Koneksi yang Terdampak", + "阶段 {1}": "Fase {1}", + "接口测试成功": "Uji endpoint berhasil", + "接口测试失败": "Uji Endpoint Gagal", + "接口连接失败,请检查本地服务或稍后重试": "Koneksi Endpoint Gagal. Periksa layanan lokal atau coba lagi nanti.", + "接入工具:{1}": "Hubungkan Alat: {1}", + "节点 {1}:{2}": "Node {1}: {2}", + "节点 / 槽位 / 动作白名单": "Node / Slot / Daftar Aksi yang Diizinkan", + "节点 ID「{1}」已经存在": "Node ID \"{1}\" sudah ada", + "结构化结果": "Hasil Terstruktur", + "结构化整理": "Penataan Terstruktur", + "结构清晰": "Struktur Jelas", + "解析原始资料": "Parse Sumber Data", + "解析执行计划": "Parse Rencana Eksekusi", + "解析中": "Sedang Parse", + "解析状态:": "Status Parse:", + "仅命中知识图谱": "Hanya Cocok dengan Graf Pengetahuan", + "仅支持 .md、.doc、.docx、txt 文件": "Hanya mendukung file .md, .doc, .docx, .txt", + "进入条件": "Kondisi Masuk", + "进入条件:{1}。": "Kondisi Masuk: {1}.", + "进入条件:总是进入。": "Kondisi Masuk: Selalu masuk.", + "进入新增节点": "Masuk Node Baru", + "拒绝": "Tolak", + "拒绝失败": "Penolakan Gagal", + "决定查询知识库": "Putuskan Query Basis Pengetahuan", + "决定调用工具 {1}": "Putuskan Panggil Alat {1}", + "决定继续调用 {1}": "Putuskan Lanjut Panggil {1}", + "决定继续调用工具": "Putuskan Lanjut Panggil Alat", + "决定下一步": "Tentukan Langkah Berikutnya", + "开放广场会永久删除该知识库及其文档、内部索引、引用来源和版本记录。": "Marketplace akan menghapus basis pengetahuan ini secara permanen, termasuk dokumen, indeks internal, sitasi, dan riwayat versi.", + "开放广场让能力复制和复用": "Marketplace Memungkinkan Penyalinan dan Penggunaan Ulang Kemampuan", + "开启后,其他账号可以在对话端和数字员工广场中选择这个员工。": "Setelah diaktifkan, akun lain dapat memilih karyawan ini di percakapan dan Marketplace Karyawan Digital.", + "开始 -> {1}": "Mulai -> {1}", + "看板摘要": "Ringkasan Dashboard", + "可补充任务目的、范围或结果要求": "Opsional: tambahkan tujuan tugas, ruang lingkup, atau persyaratan hasil", + "可读知识页,用于长期沉淀、跨文档综合和数字员工复制。": "Halaman pengetahuan yang mudah dibaca, untuk penyimpanan jangka panjang, sintesis lintas dokumen, dan penyalinan karyawan digital.", + "可复制": "Bisa Disalin", + "可复制到当前数字员工的技能。": "Keterampilan yang bisa disalin ke karyawan digital saat ini.", + "可复制和复用的业务 SOP。": "SOP bisnis yang bisa disalin dan digunakan ulang.", + "可复制和复用的业务流程与执行规范。": "Alur bisnis dan standar eksekusi yang bisa disalin dan digunakan ulang.", + "可开放给员工调用和测试的工具能力。": "Kemampuan alat yang tersedia untuk karyawan gunakan dan uji.", + "可配置到员工工具的工具。": "Alat yang bisa dikonfigurasi untuk alat karyawan.", + "可确认建议": "Saran yang Bisa Dikonfirmasi", + "可新增候选": "Kandidat yang Bisa Ditambahkan", + "可信来源": "Sumber Terpercaya", + "可选,参考文档或项目主页": "Opsional, dokumen referensi atau halaman proyek", + "可选,用于说明这个定时任务的来源和目的": "Opsional. Jelaskan sumber dan tujuan tugas terjadwal ini.", + "可用": "Tersedia", + "可用工具": "Alat yang Tersedia", + "可追溯": "Dapat Dilacak", + "控制一次用户输入内员工可连续决策和调用工具的最大次数,用于避免无限循环。": "Batasi jumlah keputusan dan pemanggilan alat yang bisa dilakukan karyawan secara berurutan dalam satu input pengguna, untuk mencegah loop tak terbatas.", + "口径统一": "Standar Konsisten", + "口径治理": "Tata Kelola Standar", + "理解需求": "Pahami Kebutuhan", + "例如 天气查询、代码审查": "Contoh: Query Cuaca, Review Kode", + "例如 研发工程师、财务助理": "Contoh: Insinyur R&D, Asisten Keuangan", + "例如 张三": "Contoh: Zhang San", + "例如 alchaincyf/nuwa-skill 或 https://github.com/owner/repo/tree/main/skill": "Contoh: alchaincyf/nuwa-skill atau https://github.com/owner/repo/tree/main/skill", + "例如 gpt-4o": "Contoh: gpt-4o", + "例如 GPT-4o": "Contoh: GPT-4o", + "例如 openai_compatible": "Contoh: openai_compatible", + "例如 zhang_san": "Contoh: zhang_san", + "例如:每日交付质量复盘": "Contoh: Evaluasi Kualitas Pengiriman Harian", + "例如:默认员工": "Contoh: Karyawan Default", + "例如:请补充需要校验的报文内容。": "Contoh: Sertakan konten pesan yang perlu divalidasi.", + "例如:信息完整后继续": "Contoh: Lanjutkan setelah informasi lengkap", + "例如:研发": "Contoh: R&D", + "连接 MCP Server,自动发现并同步其工具集": "Hubungkan MCP Server, temukan dan sinkronkan set alatnya secara otomatis", + "连接必要工具": "Hubungkan Alat yang Diperlukan", + "连接方式": "Metode Koneksi", + "连接配置": "Konfigurasi Koneksi", + "聊天可用": "Tersedia di Chat", + "浏览器、MCP、查询工具等可复用能力。": "Kemampuan browser, MCP, dan alat query yang bisa digunakan ulang.", + "流程靠人盯": "Alur Membutuhkan Pengawasan Manual", + "流程能跳过已满足信息,并在关键动作前确认。": "Alur melewati informasi yang sudah terpenuhi dan meminta konfirmasi sebelum aksi kritis.", + "流程图缩放": "Zoom Diagram Alur", + "流程约束": "Pembatasan Alur", + "流程知识": "Pengetahuan Alur", + "留空表示所有技能可调用,多个技能用英文逗号分隔。": "Kosongkan untuk mengizinkan semua keterampilan. Pisahkan beberapa keterampilan dengan koma.", + "轮对话": "Sesi Percakapan", + "没有读取到可导入的技能文件": "Tidak ada file keterampilan yang bisa diimpor.", + "没有可复制的 SOP": "Tidak ada SOP yang tersedia untuk disalin.", + "没有可复制的工具": "Tidak ada alat yang tersedia untuk disalin.", + "没有可复制的技能": "Tidak ada keterampilan yang tersedia untuk disalin.", + "没有可复制的知识库": "Tidak ada basis pengetahuan yang tersedia untuk disalin.", + "没有可清空的记忆": "Tidak ada memori yang bisa diosongkan.", + "没有内部索引": "Tidak Ada Indeks Internal", + "没有匹配的广场内容": "Tidak Ada Konten Marketplace yang Cocok", + "没有匹配的数字员工": "Tidak Ada Karyawan Digital yang Cocok", + "没有文档": "Tidak Ada Dokumen", + "每次新增一个动作;点击已有动作可重新选择。": "Tambahkan satu aksi setiap kali. Klik aksi yang sudah ada untuk memilih ulang.", + "每次执行时交给员工的任务": "Tugas yang diberikan kepada karyawan setiap kali dijalankan", + "每个员工独立维护岗位描述、服务范围、资源绑定和运营记录,适合把客服、导购、运营、知识助手拆成不同角色。": "Setiap karyawan memelihara deskripsi jabatan, cakupan layanan, pengikatan sumber daya, dan catatan operasi secara terpisah, cocok untuk memisahkan peran layanan pelanggan, penjualan, operasi, dan asisten pengetahuan.", + "每天 {1}": "Setiap Hari {1}", + "每行一个参数。": "Satu parameter per baris.", + "每月 {1} 号 {2}": "Tanggal {1} Setiap Bulan {2}", + "每月几号": "Tanggal Berapa Setiap Bulan", + "每周 {1} {2}": "Setiap {1} {2}", + "描述员工每次执行时需要做什么,可以包含拆解要求、输出格式和注意事项。": "Jelaskan apa yang harus dilakukan karyawan setiap kali dijalankan, termasuk persyaratan perincian, format output, dan catatan.", + "命中知识图谱 {1} 个": "Cocok dengan Graf Pengetahuan {1}", + "模型、员工、知识库、技能、SOP、工具、定时任务共同定义员工能力。": "Model, karyawan, basis pengetahuan, keterampilan, SOP, alat, dan tugas terjadwal bersama-sama mendefinisikan kemampuan karyawan.", + "模型:默认模型唯一,测试连接成功,密钥脱敏展示。": "Model: satu model default, uji koneksi berhasil, kredensial ditampilkan tersamarkan.", + "模型测试失败怎么办?": "Uji Model Gagal. Apa yang Harus Dilakukan?", + "模型从本次上传的知识中发现了技能或工具草案,确认后才会写入系统。": "Model menemukan draf keterampilan atau alat dari pengetahuan yang diunggah. Draf baru ditulis ke sistem setelah dikonfirmasi.", + "模型调用失败": "Panggilan Model Gagal", + "模型返回改写结果:{1}": "Model Mengembalikan Hasil Pengeditan: {1}", + "模型理解:{1}。": "Interpretasi Model: {1}.", + "模型理解:没有额外限制,流程可以从这里继续。": "Interpretasi model: tidak ada batasan tambahan, sehingga alur dapat dilanjutkan dari sini.", + "默认使用 forbid 并发策略:上一轮未结束时跳过本次唤醒,避免同一员工重复处理同一批任务。": "Secara default menggunakan strategi konkurensi forbid: melewati aktivasi saat siklus sebelumnya belum selesai, untuk mencegah karyawan yang sama memproses tugas yang sama secara berulang.", + "默认知识库": "Basis Pengetahuan Default", + "目标 Node": "Node Target", + "目标节点 {1}": "Node Target {1}", + "目标明确": "Tujuan Jelas", + "目标SOP {1}": "SOP Target {1}", + "目录": "Direktori", + "目录 /": "Direktori /", + "目录索引": "Daftar Isi", + "目录索引 目录": "Daftar Isi Direktori", + "目录索引,用于按资料、章节、主题逐级展开": "Daftar Isi yang memungkinkan penjajakan pengetahuan berdasarkan dokumen, bab, dan topik secara bertahap.", + "内部备注": "Catatan Internal", + "内部索引标题": "Judul Indeks Internal", + "内部索引摘要": "Ringkasan Indeks Internal", + "内部知识助手": "Asisten Pengetahuan Internal", + "能力": "Kemampuan", + "能力不足": "Kemampuan Tidak Cukup", + "你正在编辑现有技能。导入会进入新建状态,不会覆盖当前技能。": "Anda sedang mengedit keterampilan yang sudah ada. Mengimpor akan memulai item baru dan tidak menimpa keterampilan saat ini.", + "排名": "Peringkat", + "排行分页": "Paging Peringkat", + "判断无需继续调用工具": "Tidak Perlu Panggil Alat Lagi", + "判断意图": "Tentukan Niat", + "判断意图 {1}": "Tentukan Niat {1}", + "配置 MCP Server 连接后,可发现其提供的工具并同步为工具集。": "Setelah mengonfigurasi koneksi MCP Server, alat yang tersedia dapat ditemukan dan disinkronkan sebagai set alat.", + "配置参考": "Referensi Konfigurasi", + "配置层": "Lapisan Konfigurasi", + "配置单个 HTTP 接口作为工具": "Konfigurasikan Satu Endpoint HTTP sebagai Alat", + "配置探测": "Deteksi Konfigurasi", + "匹配工具:": "Cocokkan Alat:", + "片段摘要": "Ringkasan Cuplikan", + "普通成员": "Anggota", + "期望字段": "Field yang Diharapkan", + "其下 {1} 个已导入工具将一并删除,操作不可撤销。": "{1} alat impor di bawahnya juga akan dihapus. Tindakan ini tidak dapat dibatalkan.", + "企业数字员工运行时,从配置到持续运营": "Runtime Karyawan Digital Perusahaan, dari Konfigurasi hingga Operasi Berkelanjutan", + "启动本地进程并通过标准输入输出通信": "Mulai proses lokal dan komunikasi melalui input/output standar.", + "启用本地版本": "Aktifkan Versi Lokal", + "启用工具": "Aktifkan Alat", + "启用工具集": "Aktifkan Set Alat", + "启用失败": "Aktivasi Gagal", + "前端已从事件日志持续同步,但服务端没有写入完成事件。": "Frontend terus menyinkronkan log acara, tetapi server tidak menulis acara penyelesaian.", + "前往工具页": "Buka Halaman Alat", + "前往工具页按现有流程配置和测试工具。": "Buka halaman Alat untuk mengonfigurasi dan menguji alat dengan alur yang ada.", + "切换SOP": "Ganti SOP", + "清空": "Kosongkan", + "清空并新建 SOP?": "Kosongkan dan Buat SOP Baru?", + "清空当前改写?": "Hapus Pengeditan Saat Ini?", + "清空前是否保存?": "Simpan sebelum dikosongkan?", + "清空失败": "Gagal Mengosongkan", + "清空只会进入一个新的 SOP 草稿工作台,不会删除或替换当前正在编辑的 SOP。": "Mengosongkan hanya membuka workspace draf SOP baru. Tidak menghapus atau menggantikan SOP yang sedang diedit.", + "清空中": "Sedang Mengosongkan", + "请根据当前会话补充人工回复。": "Tambahkan balasan manusia berdasarkan percakapan saat ini.", + "请输入测试问题": "Masukkan Pertanyaan Uji", + "请输入定时任务名称": "Masukkan Nama Tugas Terjadwal", + "请输入回复内容": "Masukkan Konten Balasan", + "请输入会话名称": "Masukkan Nama Sesi Percakapan", + "请输入开源平台地址、GitHub 仓库或 SKILL.md 链接": "Masukkan URL Platform Open-Source, Repositori GitHub, atau Tautan SKILL.md", + "请输入数字员工姓名": "Masukkan Nama Karyawan Digital", + "请输入要创建的定时任务内容": "Masukkan instruksi tugas terjadwal yang akan dibuat", + "请输入要调试的知识问题": "Masukkan pertanyaan pengetahuan yang akan di-debug", + "请输入执行计划": "Masukkan Rencana Eksekusi", + "请输入执行内容": "Masukkan Konten Eksekusi", + "请填写 MCP 服务器名称": "Masukkan Nama Server MCP", + "请填写 URL": "Masukkan URL", + "请填写工具名称": "Masukkan Nama Alat", + "请填写名称、Provider 和 Model": "Masukkan Nama, Provider, dan Model", + "请填写任务描述": "Masukkan Deskripsi Tugas", + "请填写任务名称": "Masukkan Nama Tugas", + "请填写数字员工姓名": "Masukkan Nama Karyawan Digital", + "请填写账号和密码": "Masukkan Akun dan Kata Sandi", + "请填写执行时间": "Masukkan Waktu Eksekusi", + "请先保存 MCP 服务器,才能导入并同步工具。": "Simpan Server MCP terlebih dahulu sebelum mengimpor dan menyinkronkan alat.", + "请先保存 MCP 服务器,再同步工具": "Simpan Server MCP Sebelum Menyinkronkan Alat", + "请先测试接口成功后再新增工具": "Uji endpoint berhasil sebelum menambahkan alat.", + "请先创建或选择一个数字员工,再复制工具": "Buat atau Pilih Karyawan Digital Terlebih Dahulu Sebelum Menyalin Alat", + "请先导入技能": "Impor Keterampilan Terlebih Dahulu", + "请先选择复制来源": "Pilih Sumber Penyalinan Terlebih Dahulu", + "请先选择一个数字员工": "Pilih Karyawan Digital Terlebih Dahulu", + "请先选择一个数字员工,再从广场复制 SOP": "Pilih Karyawan Digital, Lalu Salin SOP dari Marketplace", + "请先选择一个数字员工,再从广场复制技能": "Pilih Karyawan Digital, Lalu Salin Keterampilan dari Marketplace", + "请先选择一个数字员工,再从广场复制知识库": "Pilih Karyawan Digital, Lalu Salin Basis Pengetahuan dari Marketplace", + "请先选择一个数字员工再配置定时任务。": "Pilih Karyawan Digital Terlebih Dahulu Sebelum Mengonfigurasi Tugas Terjadwal.", + "请先选择一个员工,再从广场复制资源。": "Pilih Karyawan Terlebih Dahulu, Lalu Salin Sumber Daya dari Marketplace.", + "请先选择员工": "Pilih Karyawan", + "请先选择知识库": "Pilih Basis Pengetahuan Terlebih Dahulu", + "请先粘贴或上传 SKILL.md": "Tempel atau Unggah SKILL.md Terlebih Dahulu", + "请选择复制来源": "Pilih Sumber Penyalinan", + "请选择复制来源员工": "Pilih Karyawan Sumber untuk Disalin", + "请选择开放广场": "Pilih Marketplace", + "请选择来源员工": "Pilih Karyawan Sumber", + "请选择图片文件": "Pilih file gambar", + "请选择星期": "Pilih hari", + "请选择要复制到的数字员工": "Pilih karyawan digital tujuan", + "请选择要复制的 SOP": "Pilih SOP yang akan disalin", + "请选择要复制的工具": "Pilih alat yang akan disalin", + "请选择要复制的技能": "Pilih keterampilan yang akan disalin", + "请选择要复制的知识库": "Pilih basis pengetahuan yang akan disalin", + "请选择执行时间": "Pilih Waktu Eksekusi", + "请粘贴原始技能说明,或点击右侧某一块后告诉我需要怎样改写。": "Tempel deskripsi keterampilan asli, atau pilih bagian di sebelah kanan dan jelaskan bagaimana seharusnya diubah.", + "请至少选择一个要导入的工具": "Pilih setidaknya satu alat untuk diimpor", + "取消定时任务": "Batalkan Tugas Terjadwal", + "取消入库任务失败": "Gagal Membatalkan Tugas Pengambilan Data", + "取消中": "Membatalkan", + "全版本": "Semua Versi", + "全部版本": "Semua Versi", + "全部分桶": "Semua Bucket", + "全历史调用": "Semua Riwayat Panggilan", + "缺少某个指定字段时进入": "Masuk saat field tertentu tidak ada", + "缺少任一必填信息": "Salah satu informasi wajib tidak ada", + "缺少样例参数,无法测试接口": "Parameter contoh diperlukan untuk menguji endpoint.", + "缺少指定字段": "Field Tertentu Tidak Ada", + "缺失原因:": "Alasan Ketidakhadiran:", + "确认端口、健康检查和日志位置。": "Konfirmasi port, health check, dan lokasi log.", + "确认删除 Node {1}:{2}?": "Konfirmasi Hapus Node {1}: {2}?", + "让 AI 员工可运营、可治理": "Buat Karyawan AI Dapat Dioperasikan dan Dikelola", + "让员工按一次性、每日、每周或每月计划执行提示词,适合巡检、周报、提醒、异常跟进和周期分析。": "Jalankan prompt karyawan secara sekali, harian, mingguan, atau bulanan untuk inspeksi, laporan mingguan, pengingat, tindak lanjut anomali, dan analisis berkala.", + "人事员工": "Karyawan HR", + "任务 ID": "ID Tugas", + "任务列表": "Daftar Tugas", + "任务名称": "Nama Tugas", + "任务说明": "Deskripsi Tugas", + "任务信息还在加载,请稍后再发送": "Informasi tugas masih dimuat, silakan coba kirim lagi sebentar", + "任务已删除": "Tugas Telah Dihapus", + "如 user_demo": "Contoh: user_demo", + "入口层": "Lapisan Entri", + "入库任务": "Tugas Ingestion", + "入职时间": "Tanggal Mulai", + "入职时间:": "Tanggal Mulai:", + "筛选会话": "Filter Percakapan", + "删除 MCP 服务器「{1}」?": "Hapus MCP Server \"{1}\"?", + "删除{1}「{2}」?": "Hapus {1} \"{2}\"?", + "删除定时任务「{1}」?": "Hapus Tugas Terjadwal \"{1}\"?", + "删除定时任务失败": "Gagal menghapus tugas terjadwal", + "删除后,引用该工具的技能将无法继续调用它,操作不可撤销。": "Setelah dihapus, skill yang menggunakan tool ini tidak akan bisa memanggilnya lagi. Tindakan ini tidak dapat dibatalkan.", + "删除后不会移除历史对话记录,但组织 SOP 列表中将不再显示该流程。": "Hapus tidak menghapus riwayat percakapan, tetapi proses ini akan hilang dari daftar SOP organisasi.", + "删除后不再唤醒该员工,历史执行记录会继续保留。": "Penghapusan menghentikan pemanggilan karyawan ini, sementara riwayat eksekusi tetap disimpan.", + "删除后该广场内容会从开放平台移除,已复制到员工侧的引用可能不再可同步。": "Item Marketplace ini akan dihapus dari platform terbuka. Salinan pada karyawan mungkin tidak lagi bisa disinkronkan.", + "删除后该技能不会再出现在技能广场中,此操作不可撤销。": "Skill ini tidak akan muncul lagi di Skill Marketplace. Tindakan ini tidak dapat dibatalkan.", + "删除后该技能不会再出现在组织技能库中,此操作不可撤销。": "Skill ini tidak akan muncul lagi di perpustakaan skill organisasi. Tindakan ini tidak dapat dibatalkan.", + "删除后该数字员工会从广场和员工列表移除,相关资源绑定也会一并清理。": "Karyawan digital ini akan dihapus dari Marketplace dan daftar karyawan, serta semua pengikatan sumber daya terkait akan ikut dibersihkan.", + "删除后该员工的所有配置将一并移除,操作不可撤销。": "Menghapus karyawan ini juga menghapus semua konfigurasinya. Tindakan ini tidak dapat dibatalkan.", + "删除后该账号无法登录,但其创建的数字员工仍然保留。": "Akun ini tidak bisa login lagi, tetapi karyawan digital yang dibuatnya tetap tersimpan.", + "删除后会同时移除所有连接到这个节点、或从这个节点发出的流转规则。": "Menghapus node ini juga menghapus semua aturan alur yang masuk dan keluar.", + "删除后无法恢复该会话及其消息记录,确定继续吗?": "Percakapan dan pesannya tidak dapat dipulihkan setelah dihapus. Lanjutkan?", + "删除后需要重新导入或手动新建该文件。": "Setelah dihapus, impor ulang atau buat ulang file ini secara manual.", + "删除文件「{1}」?": "Hapus File \"{1}\"?", + "删除员工「{1}」?": "Hapus Karyawan \"{1}\"?", + "删除账号「{1}」?": "Hapus Akun \"{1}\"?", + "商品知识": "Pengetahuan Produk", + "商品知识库 -> 比价技能 -> 购买 SOP -> 工具结果反馈": "Basis Pengetahuan Produk -> Skill Perbandingan Harga -> SOP Pembelian -> Umpan Hasil Tool", + "上传后这里会显示原始资料、知识图谱和引用来源入库进度": "Setelah upload, bagian ini menampilkan progres masuknya data sumber, knowledge graph, dan sumber sitasi", + "上传技能包失败": "Gagal Mengunggah Paket Skill", + "上传文档内容:": "Unggah Konten Dokumen:", + "上传文档内容: {1}": "Unggah Konten Dokumen: {1}", + "上传业务文档后,系统会先生成知识图谱,再刷新目录索引、引用来源与自发现建议。": "Setelah dokumen bisnis diunggah, sistem akan membuat knowledge graph, lalu memperbarui indeks daftar isi, sumber sitasi, dan saran penemuan otomatis.", + "上下文层": "Lapisan Konteks", + "上下文摘要": "Ringkasan Konteks", + "上线失败": "Gagal Dipublikasikan", + "上一步工具调用成功后进入": "Masuk setelah tool call sebelumnya berhasil", + "上一步工具调用失败后进入": "Masuk setelah tool call sebelumnya gagal", + "上一项": "Item Sebelumnya", + "尚未运行检索": "Pencarian Belum Dijalankan", + "少": "Rendah", + "设为 0 时关闭反思;每轮允许模型检查当前技能和工具结果,并决定是否重试其他技能或工具。": "Atur ke 0 untuk menonaktifkan refleksi; setiap putaran memungkinkan model memeriksa skill dan hasil tool saat ini, serta memutuskan apakah akan mencoba skill atau tool lain.", + "设为默认": "Atur sebagai Default", + "设为默认失败": "Gagal Mengatur sebagai Default", + "设置头像:{1}": "Pengaturan avatar: {1}", + "生成 {1} 条引用候选": "Buat {1} Kandidat Sitasi", + "生成 SOP 草稿:{1}": "Buat Draf SOP: {1}", + "生成代码": "Buat Kode", + "生成定时任务草案": "Buat Draf Tugas Terjadwal", + "生成回复": "Buat Balasan", + "生成失败,当前草稿未变更。": "Pembuatan gagal. Draf saat ini tidak berubah.", + "生成失败,已保留当前草稿": "Pembuatan gagal. Draf saat ini tetap disimpan.", + "生成引用来源": "Buat Sumber Sitasi", + "生成执行方案": "Buat Rencana Eksekusi", + "失败/跳过": "Gagal/Lewati", + "失败后": "Setelah Gagal", + "失败无法复盘": "Gagal Tidak Bisa Ditinjau", + "识别定时任务需求": "Identifikasi Kebutuhan Tugas Terjadwal", + "识别意图": "Identifikasi Niat", + "使用内置的 builtin.demo MCP,仅用于演示": "Gunakan MCP builtin.demo bawaan, hanya untuk demonstrasi", + "使用数字员工失败": "Gagal Menggunakan Karyawan Digital", + "使用员工": "Gunakan Karyawan", + "示例话术": "Contoh Skrip", + "事实先行": "Fakta Dahulu", + "适合浏览器验证和长时间演示。": "Cocok untuk validasi browser dan demo berdurasi panjang.", + "适合先试跑的企业场景": "Skenario enterprise yang cocok untuk uji coba awal", + "适配": "Kompatibel", + "释放以导入 SKILL.md、zip 技能包或完整技能文件夹": "Lepaskan untuk mengimpor SKILL.md, paket skill ZIP, atau folder skill lengkap", + "收集信息": "Kumpulkan Informasi", + "售后 SOP -> 订单查询工具 -> 风险回复规则 -> Trace 复盘": "SOP Pascapjualan -> Tool Pencarian Pesanan -> Aturan Balasan Risiko -> Tinjauan Trace", + "售后服务员工": "Karyawan Pelayanan Pascapjualan", + "输出 Schema": "Schema Keluaran", + "输出字段": "Bidang Keluaran", + "输入 Schema": "Schema Masukan", + "输入调试消息": "Pesan Debug Masukan", + "输入后回车添加": "Tekan Enter untuk menambahkan", + "输入会话名称": "Masukkan Nama Percakapan", + "输入或粘贴需要整理的 SOP 流程说明": "Masukkan atau tempel deskripsi alur SOP yang perlu ditata.", + "输入仅当前员工可见的岗位人设": "Masukkan persona peran yang hanya terlihat oleh karyawan saat ini", + "输入要测试的问题": "Masukkan pertanyaan yang ingin diuji", + "输入知识问题": "Masukkan Masalah Pengetahuan", + "输入字段": "Bidang Masukan", + "输入组织默认岗位人设": "Masukkan Persona Peran Default Organisasi", + "刷新 目录索引": "Perbarui Daftar Isi", + "说明你要如何改写右侧选中的部分": "Jelaskan bagaimana Anda ingin menulis ulang bagian yang dipilih di sebelah kanan", + "说明这个节点要完成的目标。": "Jelaskan tujuan yang harus dicapai oleh node ini.", + "说明这个知识图谱沉淀了什么知识": "Jelaskan pengetahuan apa yang tersimpan dalam knowledge graph ini", + "松开上传文档": "Lepaskan untuk Mengunggah Dokumen", + "松开上传文件": "Lepaskan untuk Mengunggah File", + "缩放": "Zoom", + "缩小": "Perkecil", + "所有必填信息都收集完成后进入": "Masuk setelah semua informasi wajib terkumpul", + "所有工具建议已拒绝,SOP 草稿未变更": "Semua saran tool ditolak. Draf SOP tidak berubah.", + "所有员工": "Semua Karyawan", + "探测": "Uji Coba", + "探测结果": "Hasil Uji Coba", + "探测失败": "Uji Coba Gagal", + "填写技能定义并编辑 SKILL.md,保存后可在右侧运行测试。": "Isi definisi skill dan edit SKILL.md, setelah disimpan Anda bisa menjalankan uji coba di sebelah kanan.", + "条记忆": "Memori", + "条件判断": "Kondisi", + "停用本地版本": "Nonaktifkan Versi Lokal", + "停用后其下工具将无法被员工调用。": "Setelah dinonaktifkan, tool di bawahnya tidak akan bisa dipanggil oleh karyawan.", + "停用后员工将无法调用该工具。": "Setelah dinonaktifkan, karyawan tidak akan bisa memanggil tool ini.", + "停用失败": "Gagal Menonaktifkan", + "停止单端口服务": "Hentikan Layanan Single-port", + "停止服务": "Hentikan Layanan", + "停止脚本托管的本地进程。": "Hentikan proses lokal yang dikelola oleh skrip.", + "停止重试": "Hentikan Percobaan Ulang", + "通过 HTTP 工具和内置工具连接订单、商品、知识检索或内部服务,让员工可以查询、校验、创建和触发动作。": "Gunakan tool HTTP dan tool bawaan untuk menghubungkan pesanan, produk, pencarian pengetahuan, atau layanan internal agar karyawan dapat melakukan kueri, validasi, pembuatan, dan pemicuan aksi.", + "通过 HTTP(S) 连接远程 MCP Server": "Hubungkan ke MCP Server remote melalui HTTP(S)", + "通过 Server-Sent Events 连接远程 MCP Server": "Hubungkan ke MCP Server remote melalui Server-Sent Events", + "通过商品知识库、比价技能和购买工具,完成推荐、价格解释、下单确认和结果反馈。": "Kombinasikan basis pengetahuan produk, skill perbandingan harga, dan tool pembelian untuk rekomendasi, penjelasan harga, konfirmasi pesanan, dan umpan hasil.", + "同步结果": "Hasil Sinkronisasi", + "同步失败": "Sinkronisasi Gagal", + "同步完成:新增 {1},更新 {2}": "Sinkronisasi Selesai: {1} ditambahkan, {2} diperbarui", + "头像读取失败": "Gagal Memuat Avatar", + "头像会显示在我的数字员工、数字员工档案页和对话端的员工选择中。": "Avatar akan ditampilkan di Karyawan Digital Saya, Halaman Profil Karyawan, dan pemilihan karyawan di percakapan.", + "头像图片不能超过 5MB": "Gambar avatar tidak boleh lebih dari 5 MB", + "推荐单端口启动:企业端、对话端和 API 文档都由同一个 FastAPI 进程挂载,适合本地演示和外部隧道测试。": "Disarankan single-port startup: konsol, chat, dan dokumentasi API dipasang oleh satu proses FastAPI, cocok untuk demo lokal dan pengujian tunnel eksternal.", + "推进执行": "Lanjutkan Eksekusi", + "推进SOP": "Jalankan SOP", + "推送失败": "Gagal Mengirim", + "退款、退货、换货流程需要确认订单、查询资格、收集原因并控制承诺边界,是最适合验证 SOP 和工具调用的场景。": "Proses pengembalian dana, pengembalian barang, dan penukaran memerlukan konfirmasi pesanan, pengecekan kelayakan, pengumpulan alasan, dan pengendalian batas komitmen, sehingga merupakan skenario paling cocok untuk memvalidasi SOP dan tool call.", + "拖拽文档到这里,或点击 upload": "Seret dokumen ke sini, atau klik untuk mengunggah", + "完成": "Selesai", + "完成步骤判断": "Tentukan Penyelesaian Langkah", + "完成回复": "Balasan Selesai", + "完成入库": "Ingestion Selesai", + "完成SOP判断": "Penilaian SOP Selesai", + "完整排行:当前版本差评率": "Peringkat Lengkap: Tingkat Ulasan Negatif Versi Saat Ini", + "完整排行:当前版本好评率": "Peringkat Lengkap: Tingkat Ulasan Positif Versi Saat Ini", + "完整排行:历史总榜差评率": "Peringkat Lengkap: Tingkat Ulasan Negatif Sepanjang Masa", + "完整排行:历史总榜好评率": "Peringkat Lengkap: Tingkat Ulasan Positif Sepanjang Masa", + "完整排行:全历史调用": "Peringkat Lengkap: Total Pemanggilan Sepanjang Masa", + "维护当前数字员工的知识库、知识图谱与检索调试。": "Kelola basis pengetahuan, knowledge graph, dan debugging pencarian karyawan digital saat ini.", + "维护当前数字员工技能的定义、文件包和运行测试。": "Pertahankan definisi skill, paket file, dan uji coba runtime karyawan digital saat ini.", + "维护技能广场中的技能定义、文件包和运行测试。": "Pertahankan definisi skill, paket file, dan uji coba runtime di Skill Marketplace.", + "维护知识库广场中的知识库、知识图谱与检索调试。": "Kelola basis pengetahuan, knowledge graph, dan debugging pencarian di Marketplace.", + "为当前数字员工创建技能,填写基本信息并编辑技能文件。": "Buat skill untuk karyawan digital saat ini, isi informasi dasar, dan edit file skill.", + "未导入": "Belum Diimpor", + "未读回复": "Balasan Belum Dibaca", + "未发现工具": "Tidak Ada Tool Ditemukan", + "未分桶": "Tidak Dikategorikan", + "未检测到结构变化": "Tidak Ada Perubahan Struktur Terdeteksi", + "未命名": "Tanpa Judul", + "未命名文件": "File Tanpa Judul", + "未命中": "Tidak Cocok", + "未配置": "Belum Dikonfigurasi", + "未配置模型": "Belum Ada Model Dikonfigurasi", + "未评价": "Belum Dinilai", + "未生成": "Belum Dibuat", + "未填写描述": "Deskripsi Belum Diisi", + "未选择": "Belum Dipilih", + "未选择文件": "Tidak Ada File Dipilih", + "未找到要编辑的技能": "Skill yang ingin diedit tidak ditemukan.", + "未指定节点": "Node Tidak Ditentukan", + "文档 {1}": "Dokumen {1}", + "文档 /": "Dokumen /", + "文档 / 桶 / 片段 / 引用": "Dokumen / Bucket / Cuplikan / Sitasi", + "文件:{1} {2}": "File: {1} {2}", + "文件还在解析中,请稍后发送": "File masih diproses, silakan kirim ulang nanti", + "文件夹中没有找到 SKILL.md": "SKILL.md tidak ditemukan di folder.", + "文件解析结果为空": "Hasil parsing file kosong", + "问题归因": "Atribusi Masalah", + "我的工具集": "Kumpulan Tool Saya", + "我的数字员工": "Karyawan Digital Saya", + "无 stderr": "Tidak ada stderr", + "无 stdout": "Tidak ada stdout", + "无法打开数字员工": "Tidak Bisa Membuka Karyawan Digital", + "无法解析头像图片": "Tidak Bisa Memproses Gambar Avatar", + "无结构化结果": "Tidak Ada Hasil Terstruktur", + "无匹配动作": "Tidak Ada Aksi yang Cocok", + "无需保存,直接用当前配置测试连接。": "Tidak perlu disimpan. Uji koneksi dengan konfigurasi saat ini.", + "无直接连接关系": "Tidak Ada Koneksi Langsung", + "系统可启动、页面可访问、模型可用于生成。": "Sistem dapat dimulai, halaman dapat diakses, dan model dapat menghasilkan output.", + "下次": "Lain Kali", + "下次执行": "Eksekusi Berikutnya", + "下单确认": "Konfirmasi Pesanan", + "下线失败": "Gagal Menurunkan", + "下线员工": "Karyawan Offline", + "下一节点 {1}": "Node Berikutnya {1}", + "下一项": "Item Berikutnya", + "先从低风险、高流程密度、可复盘的任务开始,再逐步接入更强工具和更高风险动作。": "Mulai dari tugas berisiko rendah, proses padat, dan dapat ditinjau, lalu secara bertahap hubungkan tool yang lebih kuat dan aksi berisiko lebih tinggi.", + "先选一个低风险但流程密集的岗位,例如售后服务、导购、运营巡检或内部知识助手。": "Pilih posisi berisiko rendah namun prosesnya padat terlebih dahulu, misalnya pascapjualan, panduan belanja, inspeksi operasional, atau asisten pengetahuan internal.", + "显示流程": "Tampilkan Alur", + "显示名": "Nama Tampilan", + "显示名:": "Nama Tampilan:", + "显示源码": "Tampilkan Kode Sumber", + "详细节点": "Node Detail", + "响应生成中断": "Pembuatan Respons Terputus", + "响应同步超时": "Sinkronisasi Respons Melewati Batas Waktu", + "消息加载失败": "Gagal Memuat Pesan", + "校验通过": "Validasi Berhasil", + "写入文档页": "Tulis Halaman Dokumen", + "写入知识图谱": "Tulis ke Knowledge Graph", + "新建空白工具": "Tool Kosong Baru", + "新建空白技能": "Skill Kosong Baru", + "新建文件": "File Baru", + "新密码": "Kata Sandi Baru", + "新增 {1} 版业务流程": "{1} Alur Bisnis Ditambahkan", + "新增 {1} 通用能力": "{1} Kemampuan Umum Ditambahkan", + "新增工具:{1}": "Tambah Tool: {1}", + "新增工具或更新 SOP 失败": "Gagal Menambah Tool atau Memperbarui SOP", + "新SOP": "SOP Baru", + "信息不足": "Informasi Tidak Cukup", + "信息结构化": "Strukturkan Informasi", + "行政": "Administrasi", + "行政员工": "Karyawan Administrasi", + "修复失败": "Perbaikan Gagal", + "修改": "Ubah", + "修改工具定义,并在右侧验证当前配置或已保存版本。": "Ubah definisi tool, dan validasi konfigurasi saat ini atau versi tersimpan di sebelah kanan.", + "需要人工接续": "Perlu Lanjutan Manual", + "选择 {1}": "Pilih {1}", + "选择 SOP": "Pilih SOP", + "选择处理方式": "Pilih Metode Pemrosesan", + "选择复制来源": "Pilih Sumber Salinan", + "选择工具": "Pilih Tool", + "选择工具类型并填写定义,可先用右侧探测区测试请求与返回结构。": "Pilih jenis tool dan isi definisinya, Anda bisa menggunakan area uji coba di sebelah kanan untuk menguji struktur request dan response terlebih dahulu.", + "选择或输入分桶": "Pilih atau Masukkan Bucket", + "选择或拖入知识库备份包(.zip)": "Pilih atau seret paket cadangan basis pengetahuan (.zip).", + "选择技能": "Pilih Skill", + "选择开放广场": "Pilih Marketplace", + "选择来源员工": "Pilih Karyawan Sumber", + "选择目标 Node": "Pilih Node Target", + "选择目标员工": "Pilih Karyawan Target", + "选择通用技能 {1}": "Pilih Skill Umum {1}", + "选择文件": "Pilih File", + "选择文件夹": "Pilih Folder", + "选择一个动作": "Pilih Satu Aksi", + "选择一个适合岗位的默认头像。": "Pilih avatar default yang cocok untuk peran ini.", + "选择一个数字员工查看能力、岗位和服务范围。": "Pilih karyawan digital untuk melihat kemampuan, peran, dan cakupan layanan.", + "选择知识库": "Pilih Basis Pengetahuan", + "选择知识库后查看文档卡片、知识索引和知识图谱": "Pilih basis pengetahuan untuk melihat kartu dokumen, indeks pengetahuan, dan knowledge graph.", + "选择知识库文档": "Pilih Dokumen Basis Pengetahuan", + "选择知识图谱": "Pilih Knowledge Graph", + "选择SOP": "Pilih SOP", + "学习记录": "Catatan Pembelajaran", + "询问用户": "Tanyakan ke Pengguna", + "研": "R", + "研发": "R&D", + "研发协作": "Kolaborasi R&D", + "研发员工": "Karyawan R&D", + "验证企业端构建": "Validasi Build Konsol Enterprise", + "样例参数": "Contoh Parameter", + "样例参数必须是 JSON 对象": "Contoh parameter harus berupa objek JSON", + "样例参数已更新": "Contoh Parameter Diperbarui", + "业务 SOP": "SOP Bisnis", + "业务动作": "Aksi Bisnis", + "业务规则": "Aturan Bisnis", + "业务流程": "Alur Bisnis", + "业务问答": "Tanya Jawab Bisnis", + "业务域": "Domain Bisnis", + "页面标题": "Judul Halaman", + "页面类型": "Jenis Halaman", + "页面路径": "Path Halaman", + "页面摘要": "Ringkasan Halaman", + "页面章节": "Bagian Halaman", + "一次测试能变成下一轮配置改进。": "Setiap pengujian dapat memperbaiki konfigurasi berikutnya.", + "一次性 · {1}": "Sekali · {1}", + "一次性 {1}": "Sekali {1}", + "一个文件对应一份独立知识库;回到知识库后可查看文档卡片、知识索引和知识图谱。": "Setiap file menciptakan basis pengetahuan independen. Kembali ke basis pengetahuan untuk melihat kartu dokumen, indeks, dan knowledge graph.", + "一键启动": "Mulai Sekali Klik", + "一条业务请求如何被推进": "Bagaimana permintaan bisnis diproses", + "移除附件": "Hapus Lampiran", + "移除失败": "Gagal Menghapus", + "已保存工具测试": "Uji Coba Tool Tersimpan", + "已保存文档": "Dokumen Tersimpan", + "已保存知识库": "Basis Pengetahuan Tersimpan", + "已保存知识内容": "Konten Pengetahuan Tersimpan", + "已保存知识图谱": "Knowledge Graph Tersimpan", + "已创建知识库和入库任务": "Basis Pengetahuan dan Tugas Ingestion Telah Dibuat", + "已从当前员工移除": "Dihapus dari Karyawan Saat Ini", + "已存在": "Sudah Ada", + "已存在同名文件": "File dengan nama yang sama sudah ada", + "已导出知识库备份包": "Paket cadangan basis pengetahuan telah diekspor.", + "已导入知识库备份包": "Paket cadangan basis pengetahuan telah diimpor.", + "已读取": "Dibaca", + "已读取 {1}": "Dibaca {1}", + "已读取 {1} 个文件{2}": "Dibaca {1} file{2}", + "已发布到广场": "Diterbitkan ke Marketplace", + "已发布到广场,可在对话端直接使用。": "Diterbitkan ke Marketplace dan tersedia langsung di Chat.", + "已发送取消请求": "Mengirim permintaan pembatalan", + "已返回": "Dikembalikan", + "已复制 {1} 个 SOP{2}": "Menyalin {1} SOP{2}", + "已复制 {1} 个工具{2}": "Menyalin {1} Alat{2}", + "已复制 {1} 个技能": "Menyalin {1} Keterampilan", + "已复制 {1} 个知识库{2}": "Menyalin {1} Basis Pengetahuan{2}", + "已回复,原会话会继续执行": "Dibalas, percakapan asli akan melanjutkan eksekusi", + "已回滚到 {1}": "Dikembalikan ke {1}", + "已加载「{1}」。你可以在右侧选择一个或多个区域,然后在这里描述需要怎样改写。": "Memuat “{1}”. Pilih satu atau lebih bagian di kanan, lalu jelaskan bagaimana cara menulis ulangnya.", + "已拒绝建议": "Saran ditolak", + "已命中": "Cocok", + "已匹配工具:{1}": "Alat cocok: {1}", + "已匹配现有工具": "Alat yang sudah ada cocok", + "已匹配现有工具:{1}": "Alat yang sudah ada cocok: {1}", + "已启用技能": "Keterampilan diaktifkan", + "已清空 {1} 条记忆": "Menghapus {1} entri memori.", + "已取消导入": "Impor dibatalkan", + "已取消入库任务": "Tugas pengindeksan dibatalkan", + "已确认 {1} 个工具,当前草稿已局部更新": "Mengonfirmasi {1} alat. Draf saat ini telah diperbarui sebagian.", + "已确认,等待其他工具建议处理完成后统一更新 SOP": "Dikonfirmasi. SOP akan diperbarui setelah semua saran alat lainnya selesai diproses.", + "已确认建议": "Saran dikonfirmasi", + "已入库引用来源": "Sumber kutipan telah diindeks", + "已删除的定时任务不能运行": "Tugas terjadwal yang sudah dihapus tidak dapat dijalankan", + "已删除的定时任务不能重新启用": "Tugas terjadwal yang sudah dihapus tidak dapat diaktifkan kembali", + "已删除工具": "Alat dihapus", + "已删除技能": "Keterampilan dihapus", + "已删除知识库": "Basis pengetahuan dihapus", + "已上线知识库": "Basis pengetahuan online", + "已设为默认": "Ditetapkan sebagai default", + "已生成 SOP 草稿:{1}": "Membuat draf SOP: {1}", + "已生成「{1}」草稿。你可以在右侧选择一个或多个区域继续改写。": "Membuat draf “{1}”. Pilih satu atau lebih bagian di kanan untuk melanjutkan penulisan ulang.", + "已停用技能": "Keterampilan dinonaktifkan", + "已停止生成": "Pembuatan dihentikan", + "已同步": "Disinkronkan", + "已完成的定时任务可编辑后重新启用": "Tugas terjadwal yang sudah selesai dapat diedit dan diaktifkan kembali.", + "已完成局部改写。": "Penulisan ulang sebagian selesai.", + "已完成思考": "Pemikiran selesai", + "已下线知识库": "Basis pengetahuan offline", + "已新增": "Ditambahkan", + "已新增 {1}": "Ditambahkan {1}", + "已移除技能": "Keterampilan dihapus", + "已移除知识库": "Basis pengetahuan dihapus", + "已执行": "Dieksekusi", + "已重命名": "Diubah namanya", + "已转为草稿": "Dikonversi ke draf", + "以当前数字员工的口吻回复。提交后,原会话会继续推进 SOP 流程。": "Balas dengan suara karyawan digital saat ini. Setelah dikirim, percakapan asli akan melanjutkan alur SOP.", + "引用": "Kutipan", + "引用来源": "Sumber Kutipan", + "引用来源包 {1}": "Paket Sumber Kutipan {1}", + "引用来源内容": "Isi Sumber Kutipan", + "引用来源摘要": "Ringkasan Sumber Kutipan", + "引用片段": "Cuplikan Kutipan", + "引用详情": "Detail Kutipan", + "应用样例参数": "Terapkan Parameter Contoh", + "用测试参数直接调用已保存工具,检查员工后续调用时的实际返回。": "Panggil alat yang sudah disimpan dengan parameter pengujian untuk memverifikasi apa yang akan diterima karyawan pada panggilan berikutnya.", + "用对话日志、Trace、反馈分析和事件记录串起路由、工具调用、回复与改进线索,失败后能定位到具体环节。": "Hubungkan routing, panggilan alat, balasan, dan bukti perbaikan dengan log percakapan, Trace, analisis umpan balik, dan peristiwa sehingga kegagalan dapat dilacak ke tahap spesifik.", + "用户": "Pengguna", + "用户 ID": "ID Pengguna", + "用户名": "Pengguna", + "用户名、用户 ID、记忆内容": "Pengguna, ID Pengguna, Isi Memori", + "用户明确拒绝后进入": "Masuk setelah pengguna secara eksplisit menolak", + "用户明确确认后进入": "Masuk setelah pengguna secara eksplisit mengonfirmasi", + "用户消息": "Pesan Pengguna", + "用户选择了创建定时任务模式": "Pengguna memilih mode membuat tugas terjadwal", + "用户已拒绝": "Pengguna menolak", + "用户已确认": "Pengguna mengonfirmasi", + "用户已停止生成": "Pengguna menghentikan pembuatan", + "用户ID": "ID Pengguna", + "用节点、必填信息、允许动作、中断策略和回复规则描述流程;已满足的信息不重复追问,只推进真正缺失的部分。": "Gambarkan alur dengan node, informasi wajib, tindakan yang diizinkan, strategi interupsi, dan aturan balasan. Informasi yang sudah dipenuhi tidak ditanyakan ulang, hanya bagian yang benar-benar hilang yang didorong.", + "用一句话描述,例如:报文已获取后进入": "Jelaskan dalam satu kalimat, misalnya: masuk setelah pesan berhasil diterima.", + "用一句话描述什么时候进入,例如:用户已经提供商品名称后进入": "Jelaskan kapan harus masuk dalam satu kalimat, misalnya: masuk setelah pengguna memberikan nama produk.", + "用于检查当前知识库的知识图谱结构,发现断链、孤立页、重复主题等问题。检查结果仅作参考,不会自动修改数据。": "Memeriksa struktur grafik pengetahuan basis pengetahuan saat ini untuk menemukan tautan putus, halaman terisolasi, topik duplikat, dan masalah lainnya. Hasil pemeriksaan hanya sebagai referensi dan tidak memodifikasi data secara otomatis.", + "用于路由和接口路径,例如 weather-zh": "Digunakan untuk routing dan jalur endpoint, misalnya weather-zh.", + "用于数字员工档案页顶部展示的 system prompt 摘要": "Ringkasan system prompt yang ditampilkan di bagian atas halaman profil karyawan digital", + "用于员工选择技能时的说明": "Deskripsi yang ditampilkan saat karyawan memilih keterampilan ini", + "用真实表达试跑": "Uji Coba dengan Bahasa Pengguna Nyata", + "右侧已更新预览,等待确认或拒绝": "Pratinjau di kanan telah diperbarui, menunggu konfirmasi atau penolakan", + "预算口径": "Definisi Anggaran", + "员": "K", + "员工:岗位边界明确,资源绑定清楚,状态可管理。": "Karyawan: batas peran jelas, pengikatan sumber daya transparan, dan status dapat dikelola.", + "员工能按业务规则推进,而不是自由发挥。": "Karyawan mengikuti aturan bisnis, bukan bertindak sesuka hati.", + "员工在对话中的角色、人设、回复风格和执行边界": "Peran, persona, gaya balasan, dan batas eksekusi karyawan dalam percakapan", + "原始资料": "Materi Sumber", + "原因:": "Alasan:", + "源码": "Kode Sumber", + "允许动作": "Tindakan yang diizinkan", + "运行闭环": "Siklus Eksekusi", + "运行测试 / 版本 / 发布": "Jalankan Uji / Versi / Terbitkan", + "运行层": "Lapisan Runtime", + "运行超时": "Batas Waktu Eksekusi", + "运行代码": "Jalankan Kode", + "运行后端测试": "Jalankan Uji Backend", + "运行后将在这里显示回复、执行流程、代码和输出": "Setelah dijalankan, balasan, alur eksekusi, kode, dan output akan muncul di sini.", + "运行流已结束,但未收到最终结果": "Alirian eksekusi telah berakhir, tetapi hasil akhir belum diterima.", + "运营:日志、Trace、反馈、记忆能形成闭环。": "Operasi: log, Trace, umpan balik, dan memori membentuk siklus tertutup.", + "运营闭环": "Siklus Operasi", + "运营常驻员工": "Karyawan Tetap Operasi", + "再次测试": "Uji Lagi", + "在 Node": "Di Node", + "在最后新增节点": "Tambah Node di Akhir", + "在最前新增节点": "Tambah Node di Awal", + "在左侧输入说明或上传文档后开始生成": "Masukkan instruksi atau unggah dokumen di sebelah kiri untuk mulai membuat.", + "暂无 目录索引 目录": "Belum ada direktori indeks", + "暂无 MCP 服务器": "Belum ada server MCP", + "暂无版本记录": "Belum ada riwayat versi", + "暂无成长轨迹": "Belum ada riwayat perkembangan", + "暂无待回答消息": "Belum ada pesan yang menunggu balasan", + "暂无回复": "Belum ada balasan", + "暂无节点说明": "Belum ada deskripsi node", + "暂无可读代表来源": "Belum ada sumber perwakilan yang dapat dibaca.", + "暂无可展示的切片正文,可点击编辑加载完整引用来源。": "Belum ada teks potongan yang dapat ditampilkan. Klik Edit untuk memuat sumber kutipan lengkap.", + "暂无来源路径": "Belum ada jalur sumber", + "暂无目录索引": "Belum ada indeks daftar isi", + "暂无启用 SOP": "Belum ada SOP yang diaktifkan", + "暂无启用工具": "Belum ada alat yang diaktifkan", + "暂无启用技能": "Belum ada keterampilan yang diaktifkan", + "暂无上下文摘要": "Belum ada ringkasan konteks", + "暂无文档摘要": "Belum ada ringkasan dokumen", + "暂无引用来源": "Belum ada sumber kutipan", + "暂无原始资料": "Belum ada materi sumber", + "暂无摘要": "Belum ada ringkasan", + "暂无正文": "Belum ada teks lengkap", + "展开来源 {1}": "Tampilkan Sumber {1}", + "展开内部索引": "Tampilkan Indeks Internal", + "展示工具调用": "Tampilkan Panggilan Alat", + "展示名称": "Nama Tampilan", + "展示设置已保存": "Pengaturan Tampilan Tersimpan", + "展示思考状态": "Tampilkan Status Pemikiran", + "展示执行技能": "Tampilkan Eksekusi Keterampilan", + "长期上下文": "Konteks Jangka Panjang", + "掌握方向": "Area Fokus", + "这不是单次 demo,而是一条最短运营闭环:配置、验证、复盘、沉淀。": "Ini bukan demo sekali pakai, melainkan siklus operasi terpendek: konfigurasi, validasi, evaluasi, dan retensi.", + "这个动作已经添加过了": "Tindakan ini sudah ditambahkan", + "这会把当前数字员工的本地版本发布为广场可复用的 SOP 新版本。": "Ini menerbitkan versi lokal karyawan digital saat ini sebagai versi SOP baru yang dapat digunakan kembali di Marketplace.", + "这些不是跳转入口,而是配置时应当检查的对象和验收标准。": "Ini bukan pintu navigasi, melainkan item pemeriksaan konfigurasi dan kriteria penerimaan.", + "这一步需要你处理": "Langkah ini membutuhkan input Anda", + "这只会在当前数字员工中隐藏该 SOP;开放广场和其他数字员工仍然保留。": "Ini hanya menyembunyikan SOP untuk karyawan digital saat ini. Marketplace dan karyawan digital lainnya tetap memilikinya.", + "这只会在当前数字员工中隐藏该技能;开放广场和其他数字员工仍然保留。": "Ini hanya menyembunyikan keterampilan untuk karyawan digital saat ini. Marketplace dan karyawan digital lainnya tetap memilikinya.", + "这只会在当前数字员工中隐藏该知识库;开放广场和其他数字员工仍然保留。": "Ini hanya menyembunyikan basis pengetahuan untuk karyawan digital saat ini. Marketplace dan karyawan digital lainnya tetap memilikinya.", + "真正能落地的企业 AI,需要知道它做了什么、为什么这么做、哪里失败、下一次如何改。": "AI perusahaan yang benar-benar dapat diterapkan harus menunjukkan apa yang dilakukannya, mengapa melakukannya, di mana gagal, dan bagaimana memperbaikinya di waktu berikutnya.", + "整理 {1} 条证据": "Mengorganisir {1} Bukti", + "整理引用来源包": "Mengorganisir Paket Sumber Kutipan", + "正在按目录索引和知识图谱检索,并整理引用来源...": "Mengambil berdasarkan indeks daftar isi dan grafik pengetahuan, lalu mengorganisir sumber kutipan...", + "正在编辑节点描述": "Mengedit Deskripsi Node", + "正在测试工具接口": "Menguji Endpoint Alat", + "正在整理上下文": "Mengorganisir Konteks Percakapan", + "正在抽取工具:{1}": "Mengekstrak Alat: {1}", + "正在调用 {1}": "Memanggil {1}", + "正在改写选中内容": "Menulis Ulang Konten Terpilih", + "正在解码技能结构": "Mendekode Struktur Keterampilan", + "正在理解技能目标与输入信息": "Memahami Target Keterampilan dan Informasi Input", + "正在学习": "Belajar", + "证据优先": "Bukti Utama", + "之间新增节点": "Tambah Node Di Antara", + "支持 doc/docx/txt/md/html/pdf;旧版 doc 会提示转换为 docx。": "Mendukung doc, docx, txt, md, html, dan pdf. File doc lama akan diminta untuk dikonversi ke docx.", + "支持常见图片格式,会自动裁剪为方形头像。": "Format gambar umum didukung dan secara otomatis dipotong menjadi avatar persegi.", + "支持对话": "Mendukung Percakapan", + "支持开源平台地址、GitHub repo/tree/raw SKILL.md 或 owner/repo 形式。本地 zip 或 Markdown 文件请在编辑页使用「导入 > 选择文件」。": "Mendukung URL platform sumber terbuka, URL GitHub repo/tree/raw SKILL.md, dan format owner/repo. Untuk file zip atau Markdown lokal, gunakan “Impor > Pilih File” di halaman edit.", + "知": "P", + "知识:文档解析完成,能命中引用,口径可复查。": "Pengetahuan: dokumen telah diurai, kutipan dapat diambil, dan standar dapat ditinjau.", + "知识层级说明": "Deskripsi Hierarki Pengetahuan", + "知识范围": "Cakupan Pengetahuan", + "知识检索": "Pencarian Pengetahuan", + "知识检索失败": "Pengambilan Pengetahuan Gagal", + "知识口径漂移": "Drift Pengetahuan", + "知识库 -> 引用回复 -> 反馈分析 -> 知识更新": "Basis Pengetahuan -> Balasan Kutipan -> Analisis Umpan Balik -> Pembaruan Pengetahuan", + "知识库 / 新建": "Basis Pengetahuan / Baru", + "知识库没有引用怎么办?": "Bagaimana jika basis pengetahuan tidak memiliki kutipan?", + "知识来源": "Sumber Pengetahuan", + "知识链接与引用": "Tautan dan Kutipan Pengetahuan", + "知识缺失": "Pengetahuan Hilang", + "知识图谱 {1}": "Grafik Pengetahuan {1}", + "知识图谱以结构化文本保存,标题和摘要会同步写入内容。": "Grafik pengetahuan disimpan sebagai teks terstruktur, dengan judul dan ringkasan yang disinkronkan ke dalam konten.", + "知识引用、长期记忆、会话状态和反馈结果进入下一次决策。": "Kutipan pengetahuan, memori jangka panjang, status percakapan, dan hasil umpan balik masuk ke keputusan berikutnya.", + "知识与工具调用": "Pengetahuan dan Panggilan Alat", + "执行记录与展示设置": "Catatan Eksekusi dan Pengaturan Tampilan", + "执行失败 {1}": "Eksekusi Gagal {1}", + "执行通用技能": "Eksekusi Keterampilan Umum", + "执行遇到问题": "Eksekusi Mengalami Masalah", + "职位": "Jabatan", + "只给员工接入它真正需要的工具,例如订单查询、商品购买、内部查询或知识检索。": "Hubungkan hanya alat yang benar-benar dibutuhkan karyawan, seperti pencarian pesanan, pembelian produk, kueri internal, atau pencarian pengetahuan.", + "只有管理员可以编辑技能广场内容": "Hanya administrator yang dapat mengedit konten Marketplace Keterampilan", + "至少需要保留一个节点": "Setidaknya satu node harus dipertahankan.", + "制度问答": "Tanya Jawab Kebijakan", + "终止": "Hentikan", + "重试策略": "Strategi percobaan ulang", + "重新编辑会回到这条消息发送前的 SOP 草稿,并截断之后的推理记录。": "Mengedit ulang akan mengembalikan draf SOP dari sebelum pesan ini dikirim dan memotong catatan penalaran setelahnya.", + "重新编辑这条消息?": "Edit ulang pesan ini?", + "重新调用工具": "Panggil Ulang Alat", + "重新分析": "Analisis Ulang", + "重新分析失败": "Analisis Ulang Gagal", + "重新生成代码": "Buat Ulang Kode", + "周期巡检、周报、异常提醒和待办跟进可以配置为定时任务,让员工在后台持续推进。": "Konfigurasikan inspeksi berkala, laporan mingguan, peringatan anomali, dan tindak lanjut sebagai tugas terjadwal agar karyawan terus bekerja di latar belakang.", + "转为草稿": "Konversi ke Draf", + "转为草稿失败": "Gagal Mengkonversi ke Draf", + "追问文案": "Tindak Lanjut Pertanyaan", + "追踪与反馈": "Pelacakan dan Umpan Balik", + "准备 OpenAI 兼容模型、单端口服务和 demo 租户数据,让企业端、对话端、API 文档在同一个本地入口下运行。": "Siapkan model kompatibel OpenAI, layanan satu port, dan data penyewa demo agar konsol, chat, dan dokumentasi API berjalan dari satu titik masuk lokal.", + "资料": "Pengetahuan", + "资料归档": "Arsip Pengetahuan", + "资料维护": "Pemeliharaan Pengetahuan", + "资料页": "Halaman Pengetahuan", + "子流程": "Sub Alur", + "自定义条件": "Kondisi Kustom", + "总榜": "Peringkat Keseluruhan", + "总差评率": "Tingkat Negatif Keseluruhan", + "总好评率": "Tingkat Positif Keseluruhan", + "总是可进入": "Selalu dapat masuk", + "组织默认岗位人设已保存": "Persona Jabatan Default Organisasi Tersimpan", + "最大运行次数": "Jumlah Maksimum Eksekusi", + "最底层可读知识页,回答时基于页面内容并追溯引用来源": "Halaman pengetahuan terbawah yang dapat dibaca, digunakan untuk menjawab berdasarkan isi halaman dengan kutipan yang dapat ditelusuri.", + "最多重试": "Percobaan Ulang Maksimum", + "最终回复": "Balasan Akhir", + "作为唯一标识,仅支持字母/数字/下划线;中文将自动转拼音,最长 15 字符。": "Sebagai pengenal unik, hanya mendukung huruf/angka/garis bawah. Bahasa Cina akan otomatis dikonversi ke pinyin, maksimal 15 karakter.", + "做归档": "Arsipkan", + "Agent 调试": "Debug Agent", + "GET 会把这里的字段作为查询参数追加到 URL;参数值填写未编码原文,例如 timezone 用 Asia/Shanghai。": "GET menambahkan field di sini sebagai parameter kueri ke URL. Isi nilai parameter dengan teks yang belum dienkoding, misalnya Asia/Shanghai untuk timezone.", + "Headers 或 Env 不是合法 JSON": "Headers atau Env bukan JSON yang valid.", + "HTTP 工具": "Alat HTTP", + "HTTP 接口": "Endpoint HTTP", + "JSON 配置格式不正确,请检查 Headers、Auth、Schema 或 MCP Config": "Format konfigurasi JSON tidak valid. Periksa Headers, Auth, Schema, atau MCP Config.", + "MCP 服务": "Layanan MCP", + "MCP 服务器": "Server MCP", + "MCP 服务器(工具集)": "Server MCP (Set Alat)", + "MCP 服务器列表": "Daftar Server MCP", + "MCP 工具": "Alat MCP", + "MCP/浏览器": "MCP/Browser", + "PilotDeck 把能力分成 WorkSpace、Router、Memory、Always On、Gateway;StaffDeck 对应到企业数字员工场景,重点是岗位边界、知识治理、流程执行、工具调用和运营复盘。": "PilotDeck membagi kemampuan menjadi WorkSpace, Router, Memory, Always On, dan Gateway. StaffDeck menerapkannya pada skenario karyawan digital perusahaan dengan fokus pada batas jabatan, tata kelola pengetahuan, eksekusi alur kerja, panggilan alat, dan evaluasi operasi.", + "Router 判断": "Router Menentukan", + "Router、Agent Loop、Skill Runtime 和 Response Generator 推进任务。": "Router, Agent Loop, Skill Runtime, dan Response Generator Mendorong Tugas.", + "Schema / 测试 / 调用日志": "Schema / Uji / Log Panggilan", + "SKILL.md 是技能入口,不能删除": "SKILL.md adalah titik masuk keterampilan dan tidak dapat dihapus.", + "SOP / 技能推进": "SOP / Kemajuan Keterampilan", + "SOP 为什么重复追问?": "Mengapa SOP mengulang pertanyaan tindak lanjut?", + "SOP 已保存,当前改写已清空": "SOP Tersimpan dan Penulisan Ulang Saat Ini Telah Dihapus", + "SOP ID 已存在,已另存为 {1}": "ID SOP sudah ada dan telah disimpan sebagai {1}", + "SOP:节点、槽位、允许动作和回复规则明确。": "SOP: Node, Slot, Tindakan yang Diizinkan, dan Aturan Balasan Ditetapkan dengan Jelas.", + "StaffDeck 产品预览": "Pratinjau Produk StaffDeck", + "Stdio(本地命令)": "Stdio (Perintah Lokal)", + "Temperature 与 Max Tokens 必须是数字": "Temperature dan Max Tokens harus berupa angka", + "Trace / 反馈 / 记忆": "Trace / Umpan Balik / Memori", + "Trace 分页": "Paginasi Trace", + "Trace 展示路由、槽位和工具调用": "Trace Menampilkan Routing, Slot, dan Panggilan Alat", + "Trace、事件日志和反馈分析让每次执行都能被追踪和改进。": "Trace, log peristiwa, dan analisis umpan balik memastikan setiap eksekusi dapat dilacak dan ditingkatkan.", + "StaffDeck 把模型、数字员工、知识库、技能、SOP、工具、记忆、定时任务和 Trace 放到一条链路里, 让企业拥有可配置、可验证、可复盘的业务流程对话系统。": "StaffDeck menghubungkan model, karyawan digital, basis pengetahuan, keterampilan, SOP, alat, memori, tugas terjadwal, dan Trace menjadi satu rangkaian, sehingga perusahaan memiliki sistem percakapan alur kerja yang dapat dikonfigurasi, divalidasi, dan dievaluasi.", + "StaffDeck 单页文档目录": "Direktori Dokumen Halaman Tunggal StaffDeck", + "StaffDeck 的对话不是单轮问答。它会在路由、知识、技能、SOP、工具和回复生成之间形成可追踪执行链路。": "Percakapan StaffDeck bukan tanya jawab satu putaran. Percakapan membentuk rantai eksekusi yang dapat dilacak melalui routing, pengetahuan, keterampilan, SOP, alat, dan pembuatan balasan.", + "StaffDeck 的核心不是“能聊天”,而是让一个真实岗位拥有自己的配置、资源、执行规则和运营记录。 每个员工都可以有独立知识、SOP、工具和记忆;每次对话都能回看路由、工具调用、回复和反馈。": "Inti StaffDeck bukan “bisa ngobrol”, melainkan memberikan sebuah jabatan nyata konfigurasi, sumber daya, aturan eksekusi, dan riwayat operasinya sendiri. Setiap karyawan memiliki pengetahuan, SOP, alat, dan memori yang independen, dan setiap percakapan dapat ditinjau kembali dari routing, panggilan alat, balasan, hingga umpan balik.", + "由文档 {1} 创建": "Dibuat dari Dokumen {1}", + "URL 已包含查询参数时请把 HTTP Method 切换为 GET;POST 会把测试参数作为 JSON Body 发送。": "Jika URL sudah berisi parameter kueri, ubah HTTP Method ke GET. POST mengirim parameter pengujian sebagai JSON body.", + "加入发送队列": "Tambahkan ke Antrean Pengiriman", + "待回答会话仅支持发送人工回复": "Percakapan yang menunggu balasan hanya menerima balasan manusia", + "待回答暂不支持附件,请发送文字回复": "Lampiran tidak didukung untuk balasan yang menunggu; kirimkan balasan teks saja", + "当前账号不能直接向该会话发送消息,请从待回答列表回复": "Akun ini tidak dapat mengirim pesan langsung ke percakapan ini; balas dari daftar Menunggu Balasan", + "还没有可用模型配置,发送消息前请先完成模型配置。": "Belum ada konfigurasi model yang tersedia. Silakan konfigurasikan model sebelum mengirim pesan.", + "系统管理员尚未配置可用模型,暂时无法发送消息。请联系管理员完成模型配置。": "Administrator sistem belum mengkonfigurasi model yang tersedia, sehingga pesan belum dapat dikirim. Silakan hubungi administrator untuk menyelesaikan konfigurasi model.", + "模型配置正在加载,请稍后再发送": "Konfigurasi model sedang dimuat, silakan coba kirim lagi nanti", + "无法读取模型配置,请刷新页面后重试": "Tidak dapat memuat konfigurasi model. Segarkan halaman dan coba lagi.", + "系统管理员尚未配置可用模型,请联系管理员完成模型配置": "Administrator sistem belum mengkonfigurasi model yang tersedia. Silakan hubungi administrator untuk menyelesaikan konfigurasi model.", + "请填写配置名称、Provider 和 Model": "Isi nama konfigurasi, Provider, dan Model", + "模型连接失败,请检查配置后重试。": "Koneksi model gagal. Periksa konfigurasi dan coba lagi.", + "模型连接成功。": "Koneksi model berhasil.", + "模型保存或连接测试失败,请检查配置后重试。": "Penyimpanan model atau uji koneksi gagal. Periksa konfigurasi dan coba lagi.", + "需要先配置模型": "Konfigurasi Model Diperlukan", + "配置名称": "Nama Konfigurasi", + "例如 https://api.openai.com/v1": "Misalnya https://api.openai.com/v1", + "当前账号没有模型管理权限,请联系管理员完成模型配置和连通性测试。": "Akun ini tidak memiliki izin pengelolaan model. Hubungi administrator untuk mengkonfigurasi dan menguji model.", + "正在测试": "Menguji", + "保存并重新测试": "Simpan dan Uji Lagi", + "保存并测试": "Simpan dan Uji" +}; + +// Generate id.json +const id = {}; +let translated = 0; +let fallback = 0; + +for (const [zhKey, enValue] of Object.entries(en)) { + if (T[zhKey] !== undefined) { + id[zhKey] = T[zhKey]; + translated++; + } else { + // Fallback: use English value as placeholder (user can review later) + id[zhKey] = enValue; + fallback++; + } +} + +fs.writeFileSync(idPath, JSON.stringify(id, null, 2) + '\n', 'utf8'); +console.log(`Generated id.json: ${translated} translated, ${fallback} fallback (English), ${Object.keys(id).length} total keys.`); diff --git a/frontend-enterprise/src/components/LanguageSwitcher.tsx b/frontend-enterprise/src/components/LanguageSwitcher.tsx index b8fbcd8..210da03 100644 --- a/frontend-enterprise/src/components/LanguageSwitcher.tsx +++ b/frontend-enterprise/src/components/LanguageSwitcher.tsx @@ -14,6 +14,7 @@ import { cn } from '@/lib/utils'; const OPTIONS: Array<{ locale: AppLocale; label: string; shortLabel: string }> = [ { locale: 'zh-CN', label: '中文', shortLabel: '中' }, { locale: 'en-US', label: 'English', shortLabel: 'EN' }, + { locale: 'id-ID', label: 'Bahasa Indonesia', shortLabel: 'ID' }, ]; export default function LanguageSwitcher({ className }: { className?: string }) { @@ -24,7 +25,9 @@ export default function LanguageSwitcher({ className }: { className?: string }) {OPTIONS.map((option) => ( 运行记录 -> 记忆沉淀 -> 下轮复用": "Tugas Terjadwal -> Catatan Jalankan -> Penyimpanan Memori -> Gunakan Kembali di Putaran Berikutnya", + "定时任务「{1}」已启用": "Tugas Terjadwal \"{1}\" Diaktifkan", + "定时任务把周期工作常驻化": "Tugas terjadwal membuat pekerjaan berulang menjadi permanen", + "定时任务草案": "Draf Tugas Terjadwal", + "定时任务统计": "Statistik Tugas Terjadwal", + "定时任务已保存": "Tugas Terjadwal Tersimpan", + "定时任务已创建": "Tugas Terjadwal Dibuat", + "定时任务已启用": "Tugas Terjadwal Diaktifkan", + "定时任务已暂停": "Tugas Terjadwal Dijeda", + "定时任务执行失败。": "Eksekusi Tugas Terjadwal Gagal.", + "定义一个真实岗位": "Tentukan Peran Nyata", + "动作": "Aksi", + "动作可追溯": "Aksi yang Dapat Dilacak", + "读取 {1} 个片段": "Membaca {1} potongan", + "读取来源": "Baca Sumber", + "读取失败": "Gagal Membaca", + "读取文件失败": "Gagal membaca file", + "读取引用来源": "Baca Sumber Sitasi", + "读取运行结果": "Baca Hasil Jalankan", + "读取知识库": "Baca Basis Pengetahuan", + "读取中": "Membaca", + "端点": "Endpoint", + "段": "Bagian", + "对话": "Percakapan", + "对话端": "Chat", + "对话端承接真实用户表达;企业端负责配置、运营和复盘。": "Chat menangani ekspresi pengguna nyata; konsol perusahaan menangani konfigurasi, operasi, dan tinjauan.", + "对话反馈统计": "Statistik Umpan Balik Percakapan", + "对话记录": "Catatan Percakapan", + "对话任务": "Tugas Percakapan", + "对话日志": "Log Percakapan", + "对话日志分页": "Paginasi Log Percakapan", + "对话日志记录每轮输入输出": "Log percakapan mencatat input dan output setiap putaran.", + "对话日志筛选": "Filter Log Percakapan", + "对话日志详情": "Detail Log Percakapan", + "对话蒸馏": "Distilasi Percakapan", + "多": "Banyak", + "发布": "Terbitkan", + "发布到广场": "Terbitkan ke Pasar", + "发布到广场的知识库,可复制到你的数字员工。": "Basis pengetahuan yang dipublikasikan ke Marketplace dapat disalin ke karyawan digital Anda.", + "发布内容后会在这里展示": "Konten yang dipublikasikan akan muncul di sini.", + "发布失败": "Gagal Publikasi", + "发起对话": "Mulai Percakapan", + "发起对话失败": "Gagal Memulai Percakapan", + "发送": "Kirim", + "发送失败": "Gagal Mengirim", + "发现 {1} 个待处理建议": "Ditemukan {1} Saran yang Perlu Ditangani", + "发现 {1} 个工具": "Ditemukan {1} Tool", + "发现 SOP/工具": "Temukan SOP/Tool", + "发现/同步": "Temukan/Sinkron", + "发现的工具": "Tool yang Ditemukan", + "发现工具": "Temukan Tool", + "发现工具失败": "Gagal Menemukan Tool", + "发现可新增资源": "Temukan Sumber Daya yang Dapat Ditambahkan", + "法": "L", + "法务员工": "Karyawan Legal", + "反馈": "Umpan Balik", + "反馈分析定位失败原因": "Gunakan Analisis Umpan Balik untuk Mengidentifikasi Penyebab Kegagalan", + "反馈数": "Jumlah Umpan Balik", + "反馈提交失败": "Gagal Mengirim Umpan Balik", + "反思并修正": "Tinjau dan Koreksi", + "反思后继续尝试": "Coba Lagi setelah Tinjauan", + "反思检查": "Pemeriksaan Refleksi", + "反思轮数": "Putaran Refleksi", + "反思轮数与单轮最大动作数必须是数字": "Putaran refleksi dan maksimum aksi per putaran harus berupa angka.", + "反思通过": "Tinjauan Lulus", + "反思修复": "Perbaikan Refleksi", + "反思已关闭": "Refleksi Dinonaktifkan", + "返回": "Kembali", + "返回定时任务": "Kembali ke Tugas Terjadwal", + "返回工具": "Kembali ke Alat", + "返回技能": "Kembali ke Keterampilan", + "返回开放广场": "Kembali ke Pasar Terbuka", + "方法:": "Metode:", + "放大": "Perbesar", + "非 GET 请求会把这里的 JSON 作为请求体发送;仅 URL 查询串不会变成请求 Body。": "Untuk permintaan non-GET, JSON ini dikirim sebagai body permintaan. String query URL saja tidak akan menjadi body permintaan.", + "分类": "Kategori", + "分桶": "Bucket", + "分桶筛选": "Filter Bucket", + "分析失败": "Analisis Gagal", + "风险克制": "Peka Risiko", + "负责报销核对、预算口径、财务资料检索和风险提示。": "Menangani verifikasi pengembalian, standar anggaran, pencarian data keuangan, dan peringatan risiko.", + "负责会议纪要、资料归档、跨部门事务跟进和结果同步。": "Menangani notulensi rapat, pengarsipan dokumen, tindak lanjut lintas departemen, dan sinkronisasi hasil.", + "负责研发资料查询、代码任务拆解、SOP 执行和交付记录沉淀。": "Menangani pencarian data riset & pengembangan, perincian tugas kode, eksekusi SOP, dan pencatatan pengiriman.", + "负责知识库检索、资料结构化归档、信息核对和答案沉淀。": "Menangani pencarian basis pengetahuan, pengarsipan dokumen terstruktur, verifikasi informasi, dan penyimpanan jawaban.", + "复制": "Salin", + "复制到": "Salin ke", + "复制到 SOP": "Salin ke SOP", + "复制到技能": "Salin ke Keterampilan", + "复制到知识库": "Salin ke Basis Pengetahuan", + "复制工具失败": "Gagal menyalin tool", + "复制技能失败": "Gagal menyalin skill", + "复制来源": "Salin Sumber", + "复制失败": "Gagal Menyalin", + "复制知识库失败": "Gagal menyalin basis pengetahuan", + "覆盖来源": "Timpa Sumber", + "该工具不是可新增候选": "Tool ini bukan kandidig yang memenuhi syarat untuk ditambahkan.", + "该任务没有绑定数字员工,请新建任务后再发送": "Tugas ini belum memiliki karyawan digital yang ditugaskan. Buat tugas baru sebelum mengirim.", + "改进项:": "Perbaikan:", + "改写:{1}": "Rewrite: {1}", + "改写范围:{1}": "Cakupan Rewrite: {1}", + "改写失败": "Rewrite Gagal", + "改写失败,当前草稿未变更。": "Rewrite gagal. Draf saat ini tidak berubah.", + "改写失败,已保留当前草稿": "Rewrite gagal. Draf saat ini tetap dipertahankan.", + "改写完成": "Rewrite selesai", + "概括这个数字员工的岗位边界、服务风格和执行重点": "Ringkas batasan peran, gaya layanan, dan fokus eksekusi karyawan digital ini.", + "概念": "Konsep", + "岗位": "Posisi", + "岗位 Prompt": "Prompt Posisi", + "岗位边界": "Batas Posisi", + "岗位边界清楚,知道它能处理什么、不能处理什么。": "Batasan peran jelas, mengetahui apa yang bisa dan tidak bisa ditangani.", + "岗位描述": "Deskripsi Posisi", + "岗位人设": "Persona Posisi", + "岗位人设已保存": "Persona Posisi Tersimpan", + "岗位执行约束": "Batasan Eksekusi Posisi", + "格式": "Format", + "个": "item", + "个工具": "Tool", + "个链接": "Tautan", + "个切片": "Potongan", + "个人档案分区": "Bagian Profil Pribadi", + "个文件 ·": "File ·", + "个引用": "Sitasi", + "个引用来源": "Sumber Sitasi", + "给答案": "Jawab", + "给结论": "Kesimpulkan", + "更换头像": "Ganti Avatar", + "更新": "Perbarui", + "更新定时任务失败": "Gagal memperbarui tugas terjadwal", + "更新广场状态失败": "Gagal memperbarui status marketplace", + "更新记忆": "Perbarui Memori", + "更新时间": "Waktu Pembaruan", + "更新员工状态失败": "Gagal memperbarui status karyawan", + "工具": "Alat", + "工具 {1}": "Tool {1}", + "工具 ID": "ID Tool", + "工具:参数 schema 可验证,测试调用有结果。": "Tool: skema parameter dapat diverifikasi, Uji Panggilan menghasilkan hasil.", + "工具「{1}」尚未测试通过": "Tool \"{1}\" belum lulus pengujian.", + "工具操作": "Tindakan Alat", + "工具测试": "Uji Alat", + "工具测试成功:{1}": "Uji Alat Berhasil: {1}", + "工具测试失败:{1}": "Uji Alat Gagal: {1}", + "工具测试失败:{1}{2}": "Uji Tool Gagal: {1}{2}", + "工具测试完成": "Uji Alat Selesai", + "工具测试完成:{1} 个成功,{2} 个失败": "Uji Alat Selesai: {1} Berhasil, {2} Gagal", + "工具调用": "Panggilan Alat", + "工具调用不可控": "Panggilan Tool Tidak Terkontrol", + "工具调用可验证,参数和结果都能复盘。": "Panggilan tool dapat diverifikasi, parameter dan hasilnya dapat ditinjau.", + "工具调用失败": "Panggilan Alat Gagal", + "工具定义": "Definisi Alat", + "工具发现(tools/list)": "Penemuan Tool (tools/list)", + "工具分桶": "Bucket Alat", + "工具分页": "Paginasi Alat", + "工具广场": "Pasar Alat", + "工具广场列表": "Daftar Pasar Alat", + "工具集": "Set Alat", + "工具类型": "Tipe Alat", + "工具列表": "Daftar Alat", + "工具没有被调用怎么办?": "Bagaimana jika tool tidak dipanggil?", + "工具名:": "Nama Alat:", + "工具名称": "Nama Alat", + "工具能力": "Kemampuan Alat", + "工具配置": "Konfigurasi Alat", + "工具数": "Jumlah Alat", + "工具统计": "Statistik Alat", + "工具问题": "Masalah Alat", + "工具详情": "Detail Alat", + "工具信息": "Informasi Alat", + "工具信息不足": "Informasi Alat Tidak Cukup", + "工具执行成功": "Eksekusi Alat Berhasil", + "工具执行失败": "Eksekusi Alat Gagal", + "工具总数": "Total Alat", + "工作风格": "Gaya Kerja", + "工作记录": "Catatan Kerja", + "工作模式": "Mode Kerja", + "工作目录(cwd)": "Direktori Kerja (cwd)", + "工作状态": "Status Kerja", + "功能开发时保持一个原则:配置变更要能被运行验证,运行失败要能被 Trace 解释。": "Patuhi satu prinsip saat mengembangkan fitur: perubahan konfigurasi harus dapat diverifikasi saat dijalankan, dan kegagalan harus dapat dijelaskan melalui Trace.", + "共 {1} 个引用来源,当前暂无可展示的桶级代表来源。": "{1} sumber sitasi secara total. Belum ada sumber perwakilan bucket yang dapat ditampilkan.", + "构建前端,并挂载对话端、企业端和 API。": "Bangun frontend, dan pasang Chat, konsol perusahaan, dan API.", + "挂起SOP": "Tangguhkan SOP", + "关闭": "Tutup", + "关联页面": "Halaman Terkait", + "观测层": "Lapisan Observabilitas", + "管理端": "Admin", + "管理已有知识库": "Kelola Basis Pengetahuan yang Sudah Ada", + "管理员": "Administrator", + "广": "M", + "广场版": "Versi Pasar", + "广场沉淀的知识库。": "Basis Pengetahuan Marketplace.", + "广场开放的数字员工。": "Karyawan Digital Marketplace.", + "广场暂无可用数字员工": "Belum ada karyawan digital yang tersedia di Marketplace.", + "规范化原始资料": "Normalisasi Sumber Data", + "规划知识图谱": "Perencanaan Graf Pengetahuan", + "规则名称": "Nama Aturan", + "轨迹加载失败": "Gagal memuat trace", + "还没有后续节点,请新增流转规则。": "Belum ada node berikutnya, tambahkan aturan transisi.", + "还没有数字员工": "Belum Ada Karyawan Digital", + "还有必填信息没有收集到时进入": "Masuk saat informasi wajib belum terkumpul", + "好评": "Positif", + "好评 SOP": "SOP Penilaian Positif", + "好评率": "Tingkat Positif", + "和 Node": "dan Node", + "核凭证": "Verifikasi Dokumen", + "核心功能": "Fitur Inti", + "核心功能不是散点,而是一套员工运行系统": "Fitur inti merupakan satu sistem operasi karyawan, bukan fitur terpisah-pisah.", + "核心模块": "Modul Inti", + "核心执行流程": "Alur Eksekusi Inti", + "后台常驻": "Selalu Aktif", + "后台运行": "Jalankan di Latar Belakang", + "候选 {1} 个": "Kandidat {1}", + "忽略": "Abaikan", + "唤醒计划": "Jadwal Aktivasi", + "换个关键词,或切换员工分类再试试": "Coba kata kunci lain, atau ganti kategori karyawan.", + "恢复生成失败": "Gagal Melanjutkan Pembuatan", + "恢复SOP": "Lanjutkan SOP", + "回复并恢复": "Balas dan Lanjutkan", + "回复规则": "Aturan Balasan", + "回复生成": "Pembuatan Balasan", + "回复失败": "Gagal Membalas", + "回复用户": "Balas Pengguna", + "回滚": "Gulung Balik", + "回滚到版本 {1}?": "Gulung Balik ke Versi {1}?", + "回滚到此版本": "Gulung Balik ke Versi Ini", + "回滚失败": "Gagal Menggulung Balik", + "回退失败": "Gagal Mengembalikan", + "汇集所有可共享的 SOP、知识库、技能和工具,新建数字员工时可以从这里复制配置作为起点。": "Kumpulkan semua SOP, basis pengetahuan, keterampilan, dan alat yang bisa dibagikan. Saat membuat karyawan digital baru, Anda bisa menyalin konfigurasi dari sini sebagai titik awal.", + "会话": "Sesi", + "会话 ID": "ID Sesi", + "会话 Trace": "Trace Sesi", + "会话加载失败": "Gagal memuat sesi", + "会议纪要": "Notulensi Rapat", + "基本信息": "Informasi Dasar", + "基本资料": "Profil Dasar", + "基础信息": "Informasi Dasar", + "及时追问": "Tanyakan Tindak Lanjut Segera", + "几步搭好你的数字员工": "Buat karyawan digital Anda dalam beberapa langkah", + "计划": "Rencana", + "计划 / 执行 / 历史": "Rencana / Eksekusi / Riwayat", + "计划:{1}": "Rencana: {1}", + "计划类型": "Jenis Rencana", + "计划时间": "Waktu Terjadwal", + "记忆": "Memori", + "记忆查询": "Pencarian Memori", + "记忆沉淀长期偏好和复盘结论": "Memori Menyimpan Preferensi Jangka Panjang dan Kesimpulan Evaluasi", + "记忆数": "Jumlah Memori", + "技能": "Keterampilan", + "技能 {1}": "Keterampilan {1}", + "技能 ID": "ID Keterampilan", + "技能操作": "Tindakan Keterampilan", + "技能分页": "Paginasi Keterampilan", + "技能广场": "Pasar Keterampilan", + "技能广场列表": "Daftar Pasar Keterampilan", + "技能列表": "Daftar Keterampilan", + "技能名称": "Nama Keterampilan", + "技能升级": "Peningkatan Keterampilan", + "技能说明、权限或运行配置有更新": "Deskripsi, izin, atau konfigurasi runtime keterampilan telah diperbarui", + "技能统计": "Statistik Keterampilan", + "技能文件": "Berkas Keterampilan", + "技能运行超时,请检查模型或稍后重试。": "Waktu eksekusi keterampilan habis. Periksa model atau coba lagi nanti.", + "技能自发现工具": "Alat yang Ditemukan Sendiri oleh Keterampilan", + "技能总数": "Total Keterampilan", + "继续到 {1}": "Lanjutkan ke {1}", + "继续流程": "Lanjutkan Alur", + "继续追问用户": "Lanjutkan Bertanya ke Pengguna", + "加载 MCP 服务器失败": "Gagal memuat server MCP", + "加载版本失败": "Gagal memuat versi", + "加载版本详情失败": "Gagal memuat detail versi", + "加载定时任务失败": "Gagal memuat tugas terjadwal", + "加载对话详情失败": "Gagal memuat detail percakapan", + "加载工具失败": "Gagal memuat alat", + "加载技能": "Muat Keterampilan", + "加载技能失败": "Gagal memuat keterampilan", + "加载开放广场失败": "Gagal memuat pasar terbuka", + "加载来源 SOP 失败": "Gagal memuat SOP sumber", + "加载来源工具失败": "Gagal memuat alat sumber", + "加载来源技能失败": "Gagal memuat keterampilan sumber", + "加载来源知识库失败": "Gagal memuat basis pengetahuan sumber", + "加载模型失败": "Gagal memuat model", + "加载内部索引失败": "Gagal memuat indeks internal", + "加载失败": "Gagal Memuat", + "加载数字员工档案失败": "Gagal memuat profil karyawan digital", + "加载引用来源失败": "Gagal memuat sumber kutipan", + "加载员工列表失败": "Gagal memuat daftar karyawan", + "加载员工失败": "Gagal memuat karyawan", + "加载员工域失败": "Gagal memuat cakupan karyawan", + "加载账号失败": "Gagal memuat akun", + "加载知识发现建议失败": "Gagal memuat saran penemuan pengetahuan", + "加载知识库失败": "Gagal memuat basis pengetahuan", + "加载知识图谱失败": "Gagal memuat grafik pengetahuan", + "加载执行记录失败": "Gagal memuat catatan eksekusi", + "加载中…": "Memuat…", + "价格对比": "Perbandingan Harga", + "架构概览": "Ikhtisar Arsitektur", + "架构说明": "Panduan Arsitektur", + "剪贴板文件": "File Papan Klip", + "检测到当前 SOP 有未保存变更。你可以先保存当前内容;清空后会进入新的 SOP 草稿工作台,不会把原 SOP 替换为空。": "SOP saat ini memiliki perubahan yang belum disimpan. Simpan dulu jika diperlukan. Mengosongkan akan membuka workspace draf SOP baru dan tidak menggantikan SOP asli dengan yang kosong.", + "检查 API Key、Base URL 是否包含 `/v1`、模型 ID、余额和网络。先让默认模型测试通过,再验证对话端。": "Periksa API Key, apakah Base URL mengandung `/v1`, ID model, saldo, dan jaringan. Pastikan model uji default berhasil dulu, lalu validasi sisi percakapan.", + "检查 SOP 节点 allowed_actions、工具启用状态、参数 schema 和当前员工绑定关系。": "Periksa allowed_actions node SOP, status aktivasi alat, schema parameter, dan pengikatan karyawan saat ini.", + "检查节点 instruction、expected_user_info 和槽位抽取策略,确保已满足信息会被跳过。": "Periksa instruksi node, expected_user_info, dan strategi ekstraksi slot agar informasi yang sudah terpenuhi dilewati.", + "检查文档解析状态、知识库是否绑定到当前员工,以及问题是否覆盖文档中的关键概念。": "Periksa status parsing dokumen, apakah basis pengetahuan terikat ke karyawan saat ini, dan apakah pertanyaan mencakup konsep kunci dalam dokumen.", + "检索": "Retrieval", + "检索阶段": "Fase Retrieval", + "检索知识": "Ambil Pengetahuan", + "检索知识库": "Retrieval Basis Pengetahuan", + "检索中…": "Sedang mengambil…", + "检索资料": "Ambil Data", + "简单说明这个工具的用途": "Jelaskan secara singkat tujuan alat ini", + "简单说明这个工具集的用途": "Jelaskan secara singkat tujuan set alat ini", + "建立运行底座": "Bangun Fondasi Operasional", + "建议新增工具:{1}": "Alat yang Disarankan: {1}", + "渐进检索调试": "Debug Retrieval Bertahap", + "将「{1}」发布到广场?": "Terbitkan \"{1}\" ke Marketplace?", + "将清空{1},不会影响其他用户。确定继续?": "Ini akan mengosongkan {1}, tanpa mempengaruhi pengguna lain. Lanjutkan?", + "将受影响的连接": "Koneksi yang Terdampak", + "角色": "Peran", + "阶段 {1}": "Fase {1}", + "接口测试成功": "Uji endpoint berhasil", + "接口测试失败": "Uji Endpoint Gagal", + "接口连接失败,请检查本地服务或稍后重试": "Koneksi Endpoint Gagal. Periksa layanan lokal atau coba lagi nanti.", + "接入工具:{1}": "Hubungkan Alat: {1}", + "节点": "Node", + "节点 {1}": "Node {1}", + "节点 {1}:{2}": "Node {1}: {2}", + "节点 / 槽位 / 动作白名单": "Node / Slot / Daftar Aksi yang Diizinkan", + "节点 ID": "ID Node", + "节点 ID 不能为空": "ID Node tidak boleh kosong", + "节点 ID「{1}」已经存在": "Node ID \"{1}\" sudah ada", + "节点类型": "Tipe Node", + "节点说明": "Deskripsi Node", + "节点状态": "Status Node", + "结构化结果": "Hasil Terstruktur", + "结构化整理": "Penataan Terstruktur", + "结构清晰": "Struktur Jelas", + "结果": "Hasil", + "结束流程": "Akhiri Alur", + "解析原始资料": "Parse Sumber Data", + "解析执行计划": "Parse Rencana Eksekusi", + "解析中": "Sedang Parse", + "解析状态:": "Status Parse:", + "今日对话": "Percakapan Hari Ini", + "仅命中知识图谱": "Hanya Cocok dengan Graf Pengetahuan", + "仅支持 .md、.doc、.docx、.txt 文件": "Only supports. md, . doc, . docx, . txt File", + "进入条件": "Kondisi Masuk", + "进入条件:{1}。": "Kondisi Masuk: {1}.", + "进入条件:总是进入。": "Kondisi Masuk: Selalu masuk.", + "进入新增节点": "Masuk Node Baru", + "拒绝": "Tolak", + "拒绝失败": "Penolakan Gagal", + "决定查询知识库": "Putuskan Query Basis Pengetahuan", + "决定调用工具 {1}": "Putuskan Panggil Alat {1}", + "决定继续调用 {1}": "Putuskan Lanjut Panggil {1}", + "决定继续调用工具": "Putuskan Lanjut Panggil Alat", + "决定下一步": "Tentukan Langkah Berikutnya", + "开发指南": "Panduan Pengembang", + "开放广场": "Pasar Terbuka", + "开放广场会永久删除该知识库及其文档、内部索引、引用来源和版本记录。": "Marketplace akan menghapus basis pengetahuan ini secara permanen, termasuk dokumen, indeks internal, sitasi, dan riwayat versi.", + "开放广场平台": "Platform Pasar Terbuka", + "开放广场让能力复制和复用": "Marketplace Memungkinkan Penyalinan dan Penggunaan Ulang Kemampuan", + "开启后,其他账号可以在对话端和数字员工广场中选择这个员工。": "Setelah diaktifkan, akun lain dapat memilih karyawan ini di percakapan dan Marketplace Karyawan Digital.", + "开始": "Mulai", + "开始 -> {1}": "Mulai -> {1}", + "开始使用": "Mulai Menggunakan", + "开始运行": "Mulai Jalankan", + "看板摘要": "Ringkasan Dashboard", + "可补充任务目的、范围或结果要求": "Opsional: tambahkan tujuan tugas, ruang lingkup, atau persyaratan hasil", + "可读知识页,用于长期沉淀、跨文档综合和数字员工复制。": "Halaman pengetahuan yang mudah dibaca, untuk penyimpanan jangka panjang, sintesis lintas dokumen, dan penyalinan karyawan digital.", + "可复用能力": "Kemampuan yang Dapat Digunakan Kembali", + "可复制": "Bisa Disalin", + "可复制到当前数字员工的技能。": "Keterampilan yang bisa disalin ke karyawan digital saat ini.", + "可复制和复用的业务 SOP。": "SOP bisnis yang bisa disalin dan digunakan ulang.", + "可复制和复用的业务流程与执行规范。": "Alur bisnis dan standar eksekusi yang bisa disalin dan digunakan ulang.", + "可开放给员工调用和测试的工具能力。": "Kemampuan alat yang tersedia untuk karyawan gunakan dan uji.", + "可配置到员工工具的工具。": "Alat yang bisa dikonfigurasi untuk alat karyawan.", + "可确认建议": "Saran yang Bisa Dikonfirmasi", + "可新增候选": "Kandidat yang Bisa Ditambahkan", + "可信来源": "Sumber Terpercaya", + "可选": "Opsional", + "可选,参考文档或项目主页": "Opsional, dokumen referensi atau halaman proyek", + "可选,用于说明这个定时任务的来源和目的": "Opsional. Jelaskan sumber dan tujuan tugas terjadwal ini.", + "可用": "Tersedia", + "可用工具": "Alat yang Tersedia", + "可追溯": "Dapat Dilacak", + "控制一次用户输入内员工可连续决策和调用工具的最大次数,用于避免无限循环。": "Batasi jumlah keputusan dan pemanggilan alat yang bisa dilakukan karyawan secara berurutan dalam satu input pengguna, untuk mencegah loop tak terbatas.", + "口径统一": "Standar Konsisten", + "口径治理": "Tata Kelola Standar", + "快速开始": "Mulai Cepat", + "来源": "Sumber", + "来源:": "Sumber:", + "来源文档": "Dokumen Sumber", + "来自 {1}": "Dari {1}", + "类型": "Tipe", + "累计对话": "Total Percakapan", + "理解需求": "Pahami Kebutuhan", + "立即执行": "Eksekusi Sekarang", + "立即执行失败": "Gagal Eksekusi Sekarang", + "例如 天气查询、代码审查": "Contoh: Query Cuaca, Review Kode", + "例如 研发工程师、财务助理": "Contoh: Insinyur R&D, Asisten Keuangan", + "例如 张三": "Contoh: Zhang San", + "例如 alchaincyf/nuwa-skill 或 https://github.com/owner/repo/tree/main/skill": "Contoh: alchaincyf/nuwa-skill atau https://github.com/owner/repo/tree/main/skill", + "例如 gpt-4o": "Contoh: gpt-4o", + "例如 GPT-4o": "Contoh: GPT-4o", + "例如 openai_compatible": "Contoh: openai_compatible", + "例如 zhang_san": "Contoh: zhang_san", + "例如:每日交付质量复盘": "Contoh: Evaluasi Kualitas Pengiriman Harian", + "例如:默认员工": "Contoh: Karyawan Default", + "例如:请补充需要校验的报文内容。": "Contoh: Sertakan konten pesan yang perlu divalidasi.", + "例如:信息完整后继续": "Contoh: Lanjutkan setelah informasi lengkap", + "例如:研发": "Contoh: R&D", + "连接 MCP Server,自动发现并同步其工具集": "Hubungkan MCP Server, temukan dan sinkronkan set alatnya secara otomatis", + "连接必要工具": "Hubungkan Alat yang Diperlukan", + "连接方式": "Metode Koneksi", + "连接配置": "Konfigurasi Koneksi", + "链接": "Tautan", + "聊天可用": "Tersedia di Chat", + "浏览开放广场": "Jelajahi Pasar Terbuka", + "浏览器、MCP、查询工具等可复用能力。": "Kemampuan browser, MCP, dan alat query yang bisa digunakan ulang.", + "流程节点": "Node Alur", + "流程靠人盯": "Alur Membutuhkan Pengawasan Manual", + "流程能跳过已满足信息,并在关键动作前确认。": "Alur melewati informasi yang sudah terpenuhi dan meminta konfirmasi sebelum aksi kritis.", + "流程图": "Bagan Alur", + "流程图缩放": "Zoom Diagram Alur", + "流程推进": "Perjalanan Alur", + "流程约束": "Pembatasan Alur", + "流程知识": "Pengetahuan Alur", + "流转": "Transisi", + "流转规则": "Aturan Transisi", + "留痕复盘": "Audit dan Tinjauan", + "留空表示所有技能可调用,多个技能用英文逗号分隔。": "Kosongkan untuk mengizinkan semua keterampilan. Pisahkan beberapa keterampilan dengan koma.", + "轮对话": "Sesi Percakapan", + "没有读取到可导入的技能文件": "Tidak ada file keterampilan yang bisa diimpor.", + "没有可复制的 SOP": "Tidak ada SOP yang tersedia untuk disalin.", + "没有可复制的工具": "Tidak ada alat yang tersedia untuk disalin.", + "没有可复制的技能": "Tidak ada keterampilan yang tersedia untuk disalin.", + "没有可复制的知识库": "Tidak ada basis pengetahuan yang tersedia untuk disalin.", + "没有可清空的记忆": "Tidak ada memori yang bisa diosongkan.", + "没有内部索引": "Tidak Ada Indeks Internal", + "没有匹配的广场内容": "Tidak Ada Konten Marketplace yang Cocok", + "没有匹配的数字员工": "Tidak Ada Karyawan Digital yang Cocok", + "没有文档": "Tidak Ada Dokumen", + "每次新增一个动作;点击已有动作可重新选择。": "Tambahkan satu aksi setiap kali. Klik aksi yang sudah ada untuk memilih ulang.", + "每次执行时交给员工的任务": "Tugas yang diberikan kepada karyawan setiap kali dijalankan", + "每个员工独立维护岗位描述、服务范围、资源绑定和运营记录,适合把客服、导购、运营、知识助手拆成不同角色。": "Setiap karyawan memelihara deskripsi jabatan, cakupan layanan, pengikatan sumber daya, dan catatan operasi secara terpisah, cocok untuk memisahkan peran layanan pelanggan, penjualan, operasi, dan asisten pengetahuan.", + "每天": "Setiap Hari", + "每天 {1}": "Setiap Hari {1}", + "每行一个参数。": "Satu parameter per baris.", + "每月": "Bulanan", + "每月 {1} 号 {2}": "Tanggal {1} Setiap Bulan {2}", + "每月几号": "Tanggal Berapa Setiap Bulan", + "每周": "Mingguan", + "每周 {1} {2}": "Setiap {1} {2}", + "密码": "Kata Sandi", + "密码输入错误": "Input Kata Sandi Salah", + "描述": "Deskripsi", + "描述员工每次执行时需要做什么,可以包含拆解要求、输出格式和注意事项。": "Jelaskan apa yang harus dilakukan karyawan setiap kali dijalankan, termasuk persyaratan perincian, format output, dan catatan.", + "名称": "Nama", + "命中知识图谱 {1} 个": "Cocok dengan Graf Pengetahuan {1}", + "模型": "Model", + "模型、员工、知识库、技能、SOP、工具、定时任务共同定义员工能力。": "Model, karyawan, basis pengetahuan, keterampilan, SOP, alat, dan tugas terjadwal bersama-sama mendefinisikan kemampuan karyawan.", + "模型:默认模型唯一,测试连接成功,密钥脱敏展示。": "Model: satu model default, uji koneksi berhasil, kredensial ditampilkan tersamarkan.", + "模型操作": "Tindakan Model", + "模型测试失败怎么办?": "Uji Model Gagal. Apa yang Harus Dilakukan?", + "模型从本次上传的知识中发现了技能或工具草案,确认后才会写入系统。": "Model menemukan draf keterampilan atau alat dari pengetahuan yang diunggah. Draf baru ditulis ke sistem setelah dikonfirmasi.", + "模型调用失败": "Panggilan Model Gagal", + "模型返回改写结果:{1}": "Model Mengembalikan Hasil Pengeditan: {1}", + "模型分页": "Paginasi Model", + "模型理解:{1}。": "Interpretasi Model: {1}.", + "模型理解:没有额外限制,流程可以从这里继续。": "Interpretasi model: tidak ada batasan tambahan, sehingga alur dapat dilanjutkan dari sini.", + "模型列表": "Daftar Model", + "模型配置": "Konfigurasi Model", + "模型统计": "Statistik Model", + "默认": "Default", + "默认模型": "Model Default", + "默认使用 forbid 并发策略:上一轮未结束时跳过本次唤醒,避免同一员工重复处理同一批任务。": "Secara default menggunakan strategi konkurensi forbid: melewati aktivasi saat siklus sebelumnya belum selesai, untuk mencegah karyawan yang sama memproses tugas yang sama secara berulang.", + "默认头像": "Avatar Default", + "默认知识库": "Basis Pengetahuan Default", + "目标": "Target", + "目标 Node": "Node Target", + "目标节点 {1}": "Node Target {1}", + "目标明确": "Tujuan Jelas", + "目标SOP {1}": "SOP Target {1}", + "目录": "Direktori", + "目录 /": "Direktori /", + "目录索引": "Daftar Isi", + "目录索引 目录": "Daftar Isi Direktori", + "目录索引,用于按资料、章节、主题逐级展开": "Daftar Isi yang memungkinkan penjajakan pengetahuan berdasarkan dokumen, bab, dan topik secara bertahap.", + "内部备注": "Catatan Internal", + "内部索引标题": "Judul Indeks Internal", + "内部索引摘要": "Ringkasan Indeks Internal", + "内部知识助手": "Asisten Pengetahuan Internal", + "内容": "Konten", + "内置 Demo": "Demo Bawaan", + "内置能力": "Kemampuan Bawaan", + "能力": "Kemampuan", + "能力不足": "Kemampuan Tidak Cukup", + "能力复用": "Penggunaan Kembali Kemampuan", + "能力总览": "Ikhtisar Kemampuan", + "你正在编辑现有技能。导入会进入新建状态,不会覆盖当前技能。": "Anda sedang mengedit keterampilan yang sudah ada. Mengimpor akan memulai item baru dan tidak menimpa keterampilan saat ini.", + "排队中": "Antrian", + "排名": "Peringkat", + "排行分页": "Paging Peringkat", + "判断无需继续调用工具": "Tidak Perlu Panggil Alat Lagi", + "判断意图": "Tentukan Niat", + "判断意图 {1}": "Tentukan Niat {1}", + "配置 MCP Server 连接后,可发现其提供的工具并同步为工具集。": "Setelah mengonfigurasi koneksi MCP Server, alat yang tersedia dapat ditemukan dan disinkronkan sebagai set alat.", + "配置参考": "Referensi Konfigurasi", + "配置层": "Lapisan Konfigurasi", + "配置单个 HTTP 接口作为工具": "Konfigurasikan Satu Endpoint HTTP sebagai Alat", + "配置探测": "Deteksi Konfigurasi", + "匹配工具:": "Cocokkan Alat:", + "片段摘要": "Ringkasan Cuplikan", + "平台": "Platform", + "普通成员": "Anggota", + "期望字段": "Field yang Diharapkan", + "其下 {1} 个已导入工具将一并删除,操作不可撤销。": "{1} alat impor di bawahnya juga akan dihapus. Tindakan ini tidak dapat dibatalkan.", + "企业数字员工运行时,从配置到持续运营": "Runtime Karyawan Digital Perusahaan, dari Konfigurasi hingga Operasi Berkelanjutan", + "启动本地进程并通过标准输入输出通信": "Mulai proses lokal dan komunikasi melalui input/output standar.", + "启用": "Aktifkan", + "启用本地版本": "Aktifkan Versi Lokal", + "启用工具": "Aktifkan Alat", + "启用工具集": "Aktifkan Set Alat", + "启用失败": "Aktivasi Gagal", + "启用状态": "Status Aktif", + "起始节点": "Node Awal", + "前端已从事件日志持续同步,但服务端没有写入完成事件。": "Frontend terus menyinkronkan log acara, tetapi server tidak menulis acara penyelesaian.", + "前往工具页": "Buka Halaman Alat", + "前往工具页按现有流程配置和测试工具。": "Buka halaman Alat untuk mengonfigurasi dan menguji alat dengan alur yang ada.", + "切换当前员工": "Ganti Karyawan Saat Ini", + "切换到对话端": "Beralih ke Chat", + "切换到管理端": "Beralih ke Admin", + "切换SOP": "Ganti SOP", + "清除搜索": "Hapus Pencarian", + "清空": "Kosongkan", + "清空并新建 SOP?": "Kosongkan dan Buat SOP Baru?", + "清空当前改写?": "Hapus Pengeditan Saat Ini?", + "清空前是否保存?": "Simpan sebelum dikosongkan?", + "清空失败": "Gagal Mengosongkan", + "清空我的记忆": "Kosongkan Memori Saya", + "清空选择": "Hapus Pilihan", + "清空账号": "Kosongkan Akun", + "清空只会进入一个新的 SOP 草稿工作台,不会删除或替换当前正在编辑的 SOP。": "Mengosongkan hanya membuka workspace draf SOP baru. Tidak menghapus atau menggantikan SOP yang sedang diedit.", + "清空中": "Sedang Mengosongkan", + "请根据当前会话补充人工回复。": "Tambahkan balasan manusia berdasarkan percakapan saat ini.", + "请求失败": "Permintaan Gagal", + "请输入测试问题": "Masukkan Pertanyaan Uji", + "请输入定时任务名称": "Masukkan Nama Tugas Terjadwal", + "请输入回复内容": "Masukkan Konten Balasan", + "请输入会话名称": "Masukkan Nama Sesi Percakapan", + "请输入开源平台地址、GitHub 仓库或 SKILL.md 链接": "Masukkan URL Platform Open-Source, Repositori GitHub, atau Tautan SKILL.md", + "请输入密码(首次使用请输入admin)": "Masukkan kata sandi (untuk penggunaan pertama masukkan admin)", + "请输入数字员工姓名": "Masukkan Nama Karyawan Digital", + "请输入要创建的定时任务内容": "Masukkan instruksi tugas terjadwal yang akan dibuat", + "请输入要调试的知识问题": "Masukkan pertanyaan pengetahuan yang akan di-debug", + "请输入账号(首次使用请输入admin)": "Masukkan akun (untuk penggunaan pertama masukkan admin)", + "请输入执行计划": "Masukkan Rencana Eksekusi", + "请输入执行内容": "Masukkan Konten Eksekusi", + "请填写 MCP 服务器名称": "Masukkan Nama Server MCP", + "请填写 URL": "Masukkan URL", + "请填写必填项": "Harap isi semua kolom wajib", + "请填写工具名称": "Masukkan Nama Alat", + "请填写名称、Provider 和 Model": "Masukkan Nama, Provider, dan Model", + "请填写任务描述": "Masukkan Deskripsi Tugas", + "请填写任务名称": "Masukkan Nama Tugas", + "请填写数字员工姓名": "Masukkan Nama Karyawan Digital", + "请填写账号和密码": "Masukkan Akun dan Kata Sandi", + "请填写执行时间": "Masukkan Waktu Eksekusi", + "请先保存 MCP 服务器,才能导入并同步工具。": "Simpan Server MCP terlebih dahulu sebelum mengimpor dan menyinkronkan alat.", + "请先保存 MCP 服务器,再同步工具": "Simpan Server MCP Sebelum Menyinkronkan Alat", + "请先测试接口成功后再新增工具": "Uji endpoint berhasil sebelum menambahkan alat.", + "请先创建或选择一个数字员工,再复制工具": "Buat atau Pilih Karyawan Digital Terlebih Dahulu Sebelum Menyalin Alat", + "请先导入技能": "Impor Keterampilan Terlebih Dahulu", + "请先选择复制来源": "Pilih Sumber Penyalinan Terlebih Dahulu", + "请先选择一个数字员工": "Pilih Karyawan Digital Terlebih Dahulu", + "请先选择一个数字员工,再从广场复制 SOP": "Pilih Karyawan Digital, Lalu Salin SOP dari Marketplace", + "请先选择一个数字员工,再从广场复制技能": "Pilih Karyawan Digital, Lalu Salin Keterampilan dari Marketplace", + "请先选择一个数字员工,再从广场复制知识库": "Pilih Karyawan Digital, Lalu Salin Basis Pengetahuan dari Marketplace", + "请先选择一个数字员工再配置定时任务。": "Pilih Karyawan Digital Terlebih Dahulu Sebelum Mengonfigurasi Tugas Terjadwal.", + "请先选择一个员工,再从广场复制资源。": "Pilih Karyawan Terlebih Dahulu, Lalu Salin Sumber Daya dari Marketplace.", + "请先选择员工": "Pilih Karyawan", + "请先选择知识库": "Pilih Basis Pengetahuan Terlebih Dahulu", + "请先粘贴或上传 SKILL.md": "Tempel atau Unggah SKILL.md Terlebih Dahulu", + "请选择复制来源": "Pilih Sumber Penyalinan", + "请选择复制来源员工": "Pilih Karyawan Sumber untuk Disalin", + "请选择开放广场": "Pilih Marketplace", + "请选择来源员工": "Pilih Karyawan Sumber", + "请选择图片文件": "Pilih file gambar", + "请选择星期": "Pilih hari", + "请选择要复制到的数字员工": "Pilih karyawan digital tujuan", + "请选择要复制的 SOP": "Pilih SOP yang akan disalin", + "请选择要复制的工具": "Pilih alat yang akan disalin", + "请选择要复制的技能": "Pilih keterampilan yang akan disalin", + "请选择要复制的知识库": "Pilih basis pengetahuan yang akan disalin", + "请选择执行时间": "Pilih Waktu Eksekusi", + "请粘贴原始技能说明,或点击右侧某一块后告诉我需要怎样改写。": "Tempel deskripsi keterampilan asli, atau pilih bagian di sebelah kanan dan jelaskan bagaimana seharusnya diubah.", + "请至少选择一个要导入的工具": "Pilih setidaknya satu alat untuk diimpor", + "取消": "Batal", + "取消定时任务": "Batalkan Tugas Terjadwal", + "取消入库任务失败": "Gagal Membatalkan Tugas Pengambilan Data", + "取消中": "Membatalkan", + "去对话": "Buka Chat", + "全版本": "Semua Versi", + "全部": "Semua", + "全部版本": "Semua Versi", + "全部分桶": "Semua Bucket", + "全部会话": "Semua Sesi", + "全部会话 · {1}": "Semua Sesi · {1}", + "全部员工": "Semua Karyawan", + "全部状态": "Semua Status", + "全历史调用": "Semua Riwayat Panggilan", + "全选": "Pilih Semua", + "缺少某个指定字段时进入": "Masuk saat field tertentu tidak ada", + "缺少任一必填信息": "Salah satu informasi wajib tidak ada", + "缺少样例参数,无法测试接口": "Parameter contoh diperlukan untuk menguji endpoint.", + "缺少指定字段": "Field Tertentu Tidak Ada", + "缺失原因:": "Alasan Ketidakhadiran:", + "确认": "Konfirmasi", + "确认创建": "Konfirmasi Pembuatan", + "确认端口、健康检查和日志位置。": "Konfirmasi port, health check, dan lokasi log.", + "确认后执行": "Eksekusi Setelah Konfirmasi", + "确认回退": "Konfirmasi Mundur", + "确认删除": "Konfirmasi Hapus", + "确认删除 Node {1}:{2}?": "Konfirmasi Hapus Node {1}: {2}?", + "确认失败": "Gagal Mengkonfirmasi", + "确认事项": "Konfirmasi", + "确认新增": "Konfirmasi Tambah", + "让 AI 员工可运营、可治理": "Buat Karyawan AI Dapat Dioperasikan dan Dikelola", + "让员工按一次性、每日、每周或每月计划执行提示词,适合巡检、周报、提醒、异常跟进和周期分析。": "Jalankan prompt karyawan secara sekali, harian, mingguan, atau bulanan untuk inspeksi, laporan mingguan, pengingat, tindak lanjut anomali, dan analisis berkala.", + "人": "Orang", + "人事员工": "Karyawan HR", + "任务 ID": "ID Tugas", + "任务列表": "Daftar Tugas", + "任务名称": "Nama Tugas", + "任务说明": "Deskripsi Tugas", + "任务信息还在加载,请稍后再发送": "Informasi tugas masih dimuat, silakan coba kirim lagi sebentar", + "任务已删除": "Tugas Telah Dihapus", + "如 user_demo": "Contoh: user_demo", + "入口层": "Lapisan Entri", + "入库任务": "Tugas Ingestion", + "入职时间": "Tanggal Mulai", + "入职时间:": "Tanggal Mulai:", + "筛选会话": "Filter Percakapan", + "删除": "Hapus", + "删除 MCP 服务器「{1}」?": "Hapus MCP Server \"{1}\"?", + "删除{1}「{2}」?": "Hapus {1} \"{2}\"?", + "删除定时任务「{1}」?": "Hapus Tugas Terjadwal \"{1}\"?", + "删除定时任务失败": "Gagal menghapus tugas terjadwal", + "删除后,引用该工具的技能将无法继续调用它,操作不可撤销。": "Setelah dihapus, skill yang menggunakan tool ini tidak akan bisa memanggilnya lagi. Tindakan ini tidak dapat dibatalkan.", + "删除后不会移除历史对话记录,但组织 SOP 列表中将不再显示该流程。": "Hapus tidak menghapus riwayat percakapan, tetapi proses ini akan hilang dari daftar SOP organisasi.", + "删除后不再唤醒该员工,历史执行记录会继续保留。": "Penghapusan menghentikan pemanggilan karyawan ini, sementara riwayat eksekusi tetap disimpan.", + "删除后该广场内容会从开放平台移除,已复制到员工侧的引用可能不再可同步。": "Item Marketplace ini akan dihapus dari platform terbuka. Salinan pada karyawan mungkin tidak lagi bisa disinkronkan.", + "删除后该技能不会再出现在技能广场中,此操作不可撤销。": "Skill ini tidak akan muncul lagi di Skill Marketplace. Tindakan ini tidak dapat dibatalkan.", + "删除后该技能不会再出现在组织技能库中,此操作不可撤销。": "Skill ini tidak akan muncul lagi di perpustakaan skill organisasi. Tindakan ini tidak dapat dibatalkan.", + "删除后该数字员工会从广场和员工列表移除,相关资源绑定也会一并清理。": "Karyawan digital ini akan dihapus dari Marketplace dan daftar karyawan, serta semua pengikatan sumber daya terkait akan ikut dibersihkan.", + "删除后该员工的所有配置将一并移除,操作不可撤销。": "Menghapus karyawan ini juga menghapus semua konfigurasinya. Tindakan ini tidak dapat dibatalkan.", + "删除后该账号无法登录,但其创建的数字员工仍然保留。": "Akun ini tidak bisa login lagi, tetapi karyawan digital yang dibuatnya tetap tersimpan.", + "删除后会同时移除所有连接到这个节点、或从这个节点发出的流转规则。": "Menghapus node ini juga menghapus semua aturan alur yang masuk dan keluar.", + "删除后无法恢复该会话及其消息记录,确定继续吗?": "Percakapan dan pesannya tidak dapat dipulihkan setelah dihapus. Lanjutkan?", + "删除后需要重新导入或手动新建该文件。": "Setelah dihapus, impor ulang atau buat ulang file ini secara manual.", + "删除会话": "Hapus Sesi", + "删除节点": "Hapus Node", + "删除失败": "Gagal Menghapus", + "删除文件「{1}」?": "Hapus File \"{1}\"?", + "删除员工「{1}」?": "Hapus Karyawan \"{1}\"?", + "删除员工失败": "Gagal menghapus karyawan", + "删除账号「{1}」?": "Hapus Akun \"{1}\"?", + "删除账号失败": "Gagal menghapus akun", + "商品知识": "Pengetahuan Produk", + "商品知识库 -> 比价技能 -> 购买 SOP -> 工具结果反馈": "Basis Pengetahuan Produk -> Skill Perbandingan Harga -> SOP Pembelian -> Umpan Hasil Tool", + "上传后这里会显示原始资料、知识图谱和引用来源入库进度": "Setelah upload, bagian ini menampilkan progres masuknya data sumber, knowledge graph, dan sumber sitasi", + "上传技能包失败": "Gagal Mengunggah Paket Skill", + "上传失败": "Gagal Mengunggah", + "上传文档即创建知识库": "Unggah Dokumen untuk Membuat Basis Pengetahuan", + "上传文档内容:": "Unggah Konten Dokumen:", + "上传文档内容: {1}": "Unggah Konten Dokumen: {1}", + "上传文件": "Unggah Berkas", + "上传业务文档后,系统会先生成知识图谱,再刷新目录索引、引用来源与自发现建议。": "Setelah dokumen bisnis diunggah, sistem akan membuat knowledge graph, lalu memperbarui indeks daftar isi, sumber sitasi, dan saran penemuan otomatis.", + "上传自定义头像": "Unggah Avatar Kustom", + "上下文层": "Lapisan Konteks", + "上下文摘要": "Ringkasan Konteks", + "上线": "Terbitkan", + "上线失败": "Gagal Dipublikasikan", + "上一步工具调用成功后进入": "Masuk setelah tool call sebelumnya berhasil", + "上一步工具调用失败后进入": "Masuk setelah tool call sebelumnya gagal", + "上一位员工": "Karyawan Sebelumnya", + "上一项": "Item Sebelumnya", + "上一页": "Halaman Sebelumnya", + "尚未运行检索": "Pencarian Belum Dijalankan", + "少": "Rendah", + "设为 0 时关闭反思;每轮允许模型检查当前技能和工具结果,并决定是否重试其他技能或工具。": "Atur ke 0 untuk menonaktifkan refleksi; setiap putaran memungkinkan model memeriksa skill dan hasil tool saat ini, serta memutuskan apakah akan mencoba skill atau tool lain.", + "设为默认": "Atur sebagai Default", + "设为默认失败": "Gagal Mengatur sebagai Default", + "设置头像": "Atur Avatar", + "设置头像:{1}": "Pengaturan avatar: {1}", + "生成 {1} 条引用候选": "Buat {1} Kandidat Sitasi", + "生成 SOP 草稿:{1}": "Buat Draf SOP: {1}", + "生成代码": "Buat Kode", + "生成定时任务草案": "Buat Draf Tugas Terjadwal", + "生成回复": "Buat Balasan", + "生成连接已断开,后端任务仍可继续。": "Koneksi pembuatan terputus, tugas backend masih dapat dilanjutkan.", + "生成失败": "Pembuatan Gagal", + "生成失败,当前草稿未变更。": "Pembuatan gagal. Draf saat ini tidak berubah.", + "生成失败,已保留当前草稿": "Pembuatan gagal. Draf saat ini tetap disimpan.", + "生成完成": "Pembuatan Selesai", + "生成引用来源": "Buat Sumber Sitasi", + "生成执行方案": "Buat Rencana Eksekusi", + "失败": "Gagal", + "失败/跳过": "Gagal/Lewati", + "失败后": "Setelah Gagal", + "失败无法复盘": "Gagal Tidak Bisa Ditinjau", + "时间": "Waktu", + "时区": "Zona Waktu", + "识别定时任务需求": "Identifikasi Kebutuhan Tugas Terjadwal", + "识别意图": "Identifikasi Niat", + "使用此员工": "Gunakan Karyawan Ini", + "使用内置的 builtin.demo MCP,仅用于演示": "Gunakan MCP builtin.demo bawaan, hanya untuk demonstrasi", + "使用数字员工失败": "Gagal Menggunakan Karyawan Digital", + "使用员工": "Gunakan Karyawan", + "示例话术": "Contoh Skrip", + "事实先行": "Fakta Dahulu", + "事务跟进": "Tindak Lanjut", + "适合浏览器验证和长时间演示。": "Cocok untuk validasi browser dan demo berdurasi panjang.", + "适合先试跑的企业场景": "Skenario enterprise yang cocok untuk uji coba awal", + "适配": "Kompatibel", + "释放以导入 SKILL.md、zip 技能包或完整技能文件夹": "Lepaskan untuk mengimpor SKILL.md, paket skill ZIP, atau folder skill lengkap", + "收集信息": "Kumpulkan Informasi", + "收起": "Ciutkan", + "收起边栏": "Ciutkan Sidebar", + "售后 SOP -> 订单查询工具 -> 风险回复规则 -> Trace 复盘": "SOP Pascapjualan -> Tool Pencarian Pesanan -> Aturan Balasan Risiko -> Tinjauan Trace", + "售后服务员工": "Karyawan Pelayanan Pascapjualan", + "输出 Schema": "Schema Keluaran", + "输出字段": "Bidang Keluaran", + "输入 Schema": "Schema Masukan", + "输入调试消息": "Pesan Debug Masukan", + "输入后回车添加": "Tekan Enter untuk menambahkan", + "输入会话名称": "Masukkan Nama Percakapan", + "输入或粘贴需要整理的 SOP 流程说明": "Masukkan atau tempel deskripsi alur SOP yang perlu ditata.", + "输入仅当前员工可见的岗位人设": "Masukkan persona peran yang hanya terlihat oleh karyawan saat ini", + "输入消息,按 Enter 发送...": "Ketik pesan, tekan Enter untuk mengirim...", + "输入要测试的问题": "Masukkan pertanyaan yang ingin diuji", + "输入知识问题": "Masukkan Masalah Pengetahuan", + "输入字段": "Bidang Masukan", + "输入组织默认岗位人设": "Masukkan Persona Peran Default Organisasi", + "数据复盘": "Tinjauan Data", + "数字员工": "Karyawan Digital", + "数字员工创建成功": "Karyawan Digital Berhasil Dibuat", + "数字员工档案": "Profil Karyawan Digital", + "数字员工档案已更新": "Profil Karyawan Digital Diperbarui", + "数字员工分类": "Kategori Karyawan Digital", + "数字员工广场": "Pasar Karyawan Digital", + "数字员工统计": "Statistik Karyawan Digital", + "数字员工姓名": "Nama Karyawan Digital", + "数字员工运营平台": "Platform Operasional Karyawan Digital", + "刷新": "Segarkan", + "刷新 目录索引": "Perbarui Daftar Isi", + "刷新知识库失败": "Gagal menyegarkan basis pengetahuan", + "说明": "Deskripsi", + "说明:": "Deskripsi:", + "说明你要如何改写右侧选中的部分": "Jelaskan bagaimana Anda ingin menulis ulang bagian yang dipilih di sebelah kanan", + "说明这个节点要完成的目标。": "Jelaskan tujuan yang harus dicapai oleh node ini.", + "说明这个知识图谱沉淀了什么知识": "Jelaskan pengetahuan apa yang tersimpan dalam knowledge graph ini", + "松开上传文档": "Lepaskan untuk Mengunggah Dokumen", + "松开上传文件": "Lepaskan untuk Mengunggah File", + "搜索": "Cari", + "搜索 SOP 名称、ID、业务域": "Cari Nama SOP, ID, Domain Bisnis", + "搜索{1}": "Cari {1}", + "搜索工具名称、描述、URL 或分桶": "Cari Nama Alat, Deskripsi, URL atau Bucket", + "搜索技能名称、Slug、描述或主页": "Cari Nama Keterampilan, Slug, Deskripsi atau Beranda", + "搜索名称、模型、Provider 或 Base URL": "Cari Nama, Model, Provider atau Base URL", + "搜索数字员工": "Cari Karyawan Digital", + "搜索用户名或显示名": "Cari Nama Pengguna atau Nama Tampilan", + "搜索员工": "Cari Karyawan", + "搜索知识库名称、描述、状态或版本": "Cari Nama Basis Pengetahuan, Deskripsi, Status atau Versi", + "缩放": "Zoom", + "缩小": "Perkecil", + "所有必填信息都收集完成后进入": "Masuk setelah semua informasi wajib terkumpul", + "所有工具建议已拒绝,SOP 草稿未变更": "Semua saran tool ditolak. Draf SOP tidak berubah.", + "所有员工": "Semua Karyawan", + "探测": "Uji Coba", + "探测结果": "Hasil Uji Coba", + "探测失败": "Uji Coba Gagal", + "提示": "Tips", + "添加": "Tambah", + "填写技能定义并编辑 SKILL.md,保存后可在右侧运行测试。": "Isi definisi skill dan edit SKILL.md, setelah disimpan Anda bisa menjalankan uji coba di sebelah kanan.", + "条": "item", + "条记忆": "Memori", + "条件": "Kondisi", + "条件判断": "Kondisi", + "跳过当前节点": "Lewati Node Saat Ini", + "停用": "Nonaktifkan", + "停用本地版本": "Nonaktifkan Versi Lokal", + "停用后其下工具将无法被员工调用。": "Setelah dinonaktifkan, tool di bawahnya tidak akan bisa dipanggil oleh karyawan.", + "停用后员工将无法调用该工具。": "Setelah dinonaktifkan, karyawan tidak akan bisa memanggil tool ini.", + "停用失败": "Gagal Menonaktifkan", + "停止": "Berhenti", + "停止单端口服务": "Hentikan Layanan Single-port", + "停止服务": "Hentikan Layanan", + "停止脚本托管的本地进程。": "Hentikan proses lokal yang dikelola oleh skrip.", + "停止流程": "Hentikan Alur", + "停止生成": "Hentikan Pembuatan", + "停止重试": "Hentikan Percobaan Ulang", + "通过 HTTP 工具和内置工具连接订单、商品、知识检索或内部服务,让员工可以查询、校验、创建和触发动作。": "Gunakan tool HTTP dan tool bawaan untuk menghubungkan pesanan, produk, pencarian pengetahuan, atau layanan internal agar karyawan dapat melakukan kueri, validasi, pembuatan, dan pemicuan aksi.", + "通过 HTTP(S) 连接远程 MCP Server": "Hubungkan ke MCP Server remote melalui HTTP(S)", + "通过 Server-Sent Events 连接远程 MCP Server": "Hubungkan ke MCP Server remote melalui Server-Sent Events", + "通过 Trace、反馈、记忆和定时任务沉淀失败原因、稳定口径和长期任务。": "Gunakan Trace, umpan balik, memori, dan tugas terjadwal untuk menyimpan alasan kegagalan, standar yang stabil, dan tugas jangka panjang.", + "通过商品知识库、比价技能和购买工具,完成推荐、价格解释、下单确认和结果反馈。": "Kombinasikan basis pengetahuan produk, skill perbandingan harga, dan tool pembelian untuk rekomendasi, penjelasan harga, konfirmasi pesanan, dan umpan hasil.", + "同步结果": "Hasil Sinkronisasi", + "同步失败": "Sinkronisasi Gagal", + "同步完成:新增 {1},更新 {2}": "Sinkronisasi Selesai: {1} ditambahkan, {2} diperbarui", + "头像读取失败": "Gagal Memuat Avatar", + "头像会显示在我的数字员工、数字员工档案页和对话端的员工选择中。": "Avatar akan ditampilkan di Karyawan Digital Saya, Halaman Profil Karyawan, dan pemilihan karyawan di percakapan.", + "头像图片不能超过 5MB": "Gambar avatar tidak boleh lebih dari 5 MB", + "图片": "Gambar", + "推荐场景": "Skenario yang Direkomendasikan", + "推荐单端口启动:企业端、对话端和 API 文档都由同一个 FastAPI 进程挂载,适合本地演示和外部隧道测试。": "Disarankan single-port startup: konsol, chat, dan dokumentasi API dipasang oleh satu proses FastAPI, cocok untuk demo lokal dan pengujian tunnel eksternal.", + "推进执行": "Lanjutkan Eksekusi", + "推进SOP": "Jalankan SOP", + "推送失败": "Gagal Mengirim", + "退出登录": "Keluar", + "退款、退货、换货流程需要确认订单、查询资格、收集原因并控制承诺边界,是最适合验证 SOP 和工具调用的场景。": "Proses pengembalian dana, pengembalian barang, dan penukaran memerlukan konfirmasi pesanan, pengecekan kelayakan, pengumpulan alasan, dan pengendalian batas komitmen, sehingga merupakan skenario paling cocok untuk memvalidasi SOP dan tool call.", + "拖拽文档到这里,或点击上传": "Drag a document here or click to upload", + "外部能力": "Kemampuan Eksternal", + "完成": "Selesai", + "完成步骤判断": "Tentukan Penyelesaian Langkah", + "完成回复": "Balasan Selesai", + "完成入库": "Ingestion Selesai", + "完成时间": "Waktu Selesai", + "完成SOP判断": "Penilaian SOP Selesai", + "完整排行:当前版本差评率": "Peringkat Lengkap: Tingkat Ulasan Negatif Versi Saat Ini", + "完整排行:当前版本好评率": "Peringkat Lengkap: Tingkat Ulasan Positif Versi Saat Ini", + "完整排行:历史总榜差评率": "Peringkat Lengkap: Tingkat Ulasan Negatif Sepanjang Masa", + "完整排行:历史总榜好评率": "Peringkat Lengkap: Tingkat Ulasan Positif Sepanjang Masa", + "完整排行:全历史调用": "Peringkat Lengkap: Total Pemanggilan Sepanjang Masa", + "维护当前数字员工的知识库、知识图谱与检索调试。": "Kelola basis pengetahuan, knowledge graph, dan debugging pencarian karyawan digital saat ini.", + "维护当前数字员工技能的定义、文件包和运行测试。": "Pertahankan definisi skill, paket file, dan uji coba runtime karyawan digital saat ini.", + "维护技能广场中的技能定义、文件包和运行测试。": "Pertahankan definisi skill, paket file, dan uji coba runtime di Skill Marketplace.", + "维护知识库广场中的知识库、知识图谱与检索调试。": "Kelola basis pengetahuan, knowledge graph, dan debugging pencarian di Marketplace.", + "为当前数字员工创建技能,填写基本信息并编辑技能文件。": "Buat skill untuk karyawan digital saat ini, isi informasi dasar, dan edit file skill.", + "未导入": "Belum Diimpor", + "未读回复": "Balasan Belum Dibaca", + "未发现工具": "Tidak Ada Tool Ditemukan", + "未分桶": "Tidak Dikategorikan", + "未检测到结构变化": "Tidak Ada Perubahan Struktur Terdeteksi", + "未命名": "Tanpa Judul", + "未命名文件": "File Tanpa Judul", + "未命中": "Tidak Cocok", + "未配置": "Belum Dikonfigurasi", + "未配置模型": "Belum Ada Model Dikonfigurasi", + "未评价": "Belum Dinilai", + "未生成": "Belum Dibuat", + "未填写描述": "Deskripsi Belum Diisi", + "未选择": "Belum Dipilih", + "未选择文件": "Tidak Ada File Dipilih", + "未找到要编辑的技能": "Skill yang ingin diedit tidak ditemukan.", + "未知": "Tidak Diketahui", + "未知时间": "Waktu Tidak Diketahui", + "未指定节点": "Node Tidak Ditentukan", + "文本": "Teks", + "文档": "Dokumen", + "文档 {1}": "Dokumen {1}", + "文档 /": "Dokumen /", + "文档 / 桶 / 片段 / 引用": "Dokumen / Bucket / Cuplikan / Sitasi", + "文档标题": "Judul Dokumen", + "文档卡片": "Kartu Dokumen", + "文档详情": "Detail Dokumen", + "文档总数": "Total Dokumen", + "文件": "Berkas", + "文件:{1} {2}": "File: {1} {2}", + "文件格式": "Format Berkas", + "文件还在解析中,请稍后发送": "File masih diproses, silakan kirim ulang nanti", + "文件夹中没有找到 SKILL.md": "SKILL.md tidak ditemukan di folder.", + "文件解析结果为空": "Hasil parsing file kosong", + "文件名不能为空": "Nama berkas tidak boleh kosong", + "问题归因": "Atribusi Masalah", + "我的工具集": "Kumpulan Tool Saya", + "我的数字员工": "Karyawan Digital Saya", + "我们来做什么?": "Hari ini kita akan membuat apa?", + "无 stderr": "Tidak ada stderr", + "无 stdout": "Tidak ada stdout", + "无版本": "Tidak Ada Versi", + "无法打开数字员工": "Tidak Bisa Membuka Karyawan Digital", + "无法解析头像图片": "Tidak Bisa Memproses Gambar Avatar", + "无结构化结果": "Tidak Ada Hasil Terstruktur", + "无匹配动作": "Tidak Ada Aksi yang Cocok", + "无需保存,直接用当前配置测试连接。": "Tidak perlu disimpan. Uji koneksi dengan konfigurasi saat ini.", + "无直接连接关系": "Tidak Ada Koneksi Langsung", + "系统可启动、页面可访问、模型可用于生成。": "Sistem dapat dimulai, halaman dapat diakses, dan model dapat menghasilkan output.", + "下次": "Lain Kali", + "下次执行": "Eksekusi Berikutnya", + "下单确认": "Konfirmasi Pesanan", + "下线": "Offline", + "下线失败": "Gagal Menurunkan", + "下线员工": "Karyawan Offline", + "下一节点 {1}": "Node Berikutnya {1}", + "下一位员工": "Karyawan Berikutnya", + "下一项": "Item Berikutnya", + "下一页": "Halaman Berikutnya", + "先从低风险、高流程密度、可复盘的任务开始,再逐步接入更强工具和更高风险动作。": "Mulai dari tugas berisiko rendah, proses padat, dan dapat ditinjau, lalu secara bertahap hubungkan tool yang lebih kuat dan aksi berisiko lebih tinggi.", + "先选一个低风险但流程密集的岗位,例如售后服务、导购、运营巡检或内部知识助手。": "Pilih posisi berisiko rendah namun prosesnya padat terlebih dahulu, misalnya pascapjualan, panduan belanja, inspeksi operasional, atau asisten pengetahuan internal.", + "显示流程": "Tampilkan Alur", + "显示密码": "Tampilkan Kata Sandi", + "显示名": "Nama Tampilan", + "显示名:": "Nama Tampilan:", + "显示源码": "Tampilkan Kode Sumber", + "详情": "Detail", + "详细节点": "Node Detail", + "响应生成中断": "Pembuatan Respons Terputus", + "响应同步超时": "Sinkronisasi Respons Melewati Batas Waktu", + "项目简介": "Ringkasan Proyek", + "消息加载失败": "Gagal Memuat Pesan", + "校验通过": "Validasi Berhasil", + "写入文档页": "Tulis Halaman Dokumen", + "写入知识图谱": "Tulis ke Knowledge Graph", + "新对话": "Percakapan Baru", + "新建 SOP": "SOP Baru", + "新建工具": "Alat Baru", + "新建技能": "Keterampilan Baru", + "新建空白 SOP": "SOP Kosong Baru", + "新建空白定时任务": "Tugas Terjadwal Kosong Baru", + "新建空白工具": "Tool Kosong Baru", + "新建空白技能": "Skill Kosong Baru", + "新建模型": "Model Baru", + "新建数字员工": "Karyawan Digital Baru", + "新建文件": "File Baru", + "新建账号": "Akun Baru", + "新建知识库": "Basis Pengetahuan Baru", + "新密码": "Kata Sandi Baru", + "新增": "Tambah", + "新增 {1} 版业务流程": "{1} Alur Bisnis Ditambahkan", + "新增 {1} 通用能力": "{1} Kemampuan Umum Ditambahkan", + "新增 SOP": "Tambah SOP", + "新增第一个节点": "Tambah Node Pertama", + "新增动作": "Tambah Tindakan", + "新增工具": "Tambah Alat", + "新增工具:{1}": "Tambah Tool: {1}", + "新增工具或更新 SOP 失败": "Gagal Menambah Tool atau Memperbarui SOP", + "新增规则": "Tambah Aturan", + "新增技能": "Tambah Keterampilan", + "新增节点": "Tambah Node", + "新增流转": "Tambah Transisi", + "新增任务": "Tambah Tugas", + "新SOP": "SOP Baru", + "信息不足": "Informasi Tidak Cukup", + "信息结构化": "Strukturkan Informasi", + "行": "Baris", + "行政": "Administrasi", + "行政员工": "Karyawan Administrasi", + "修复失败": "Perbaikan Gagal", + "修改": "Ubah", + "修改工具定义,并在右侧验证当前配置或已保存版本。": "Ubah definisi tool, dan validasi konfigurasi saat ini atau versi tersimpan di sebelah kanan.", + "需要人工接续": "Perlu Lanjutan Manual", + "选择 {1}": "Pilih {1}", + "选择 SOP": "Pilih SOP", + "选择处理方式": "Pilih Metode Pemrosesan", + "选择复制来源": "Pilih Sumber Salinan", + "选择工具": "Pilih Tool", + "选择工具类型并填写定义,可先用右侧探测区测试请求与返回结构。": "Pilih jenis tool dan isi definisinya, Anda bisa menggunakan area uji coba di sebelah kanan untuk menguji struktur request dan response terlebih dahulu.", + "选择或输入分桶": "Pilih atau Masukkan Bucket", + "选择或拖入知识库备份包(.zip)": "Pilih atau seret paket cadangan basis pengetahuan (.zip).", + "选择技能": "Pilih Skill", + "选择开放广场": "Pilih Marketplace", + "选择来源员工": "Pilih Karyawan Sumber", + "选择目标 Node": "Pilih Node Target", + "选择目标员工": "Pilih Karyawan Target", + "选择通用技能 {1}": "Pilih Skill Umum {1}", + "选择文件": "Pilih File", + "选择文件夹": "Pilih Folder", + "选择一个动作": "Pilih Satu Aksi", + "选择一个适合岗位的默认头像。": "Pilih avatar default yang cocok untuk peran ini.", + "选择一个数字员工查看能力、岗位和服务范围。": "Pilih karyawan digital untuk melihat kemampuan, peran, dan cakupan layanan.", + "选择知识库": "Pilih Basis Pengetahuan", + "选择知识库后查看文档卡片、知识索引和知识图谱": "Pilih basis pengetahuan untuk melihat kartu dokumen, indeks pengetahuan, dan knowledge graph.", + "选择知识库文档": "Pilih Dokumen Basis Pengetahuan", + "选择知识图谱": "Pilih Knowledge Graph", + "选择SOP": "Pilih SOP", + "学习记录": "Catatan Pembelajaran", + "询问用户": "Tanyakan ke Pengguna", + "研": "R", + "研发": "R&D", + "研发协作": "Kolaborasi R&D", + "研发员工": "Karyawan R&D", + "验证企业端构建": "Validasi Build Konsol Enterprise", + "样例参数": "Contoh Parameter", + "样例参数必须是 JSON 对象": "Contoh parameter harus berupa objek JSON", + "样例参数已更新": "Contoh Parameter Diperbarui", + "业务 SOP": "SOP Bisnis", + "业务动作": "Aksi Bisnis", + "业务规则": "Aturan Bisnis", + "业务流程": "Alur Bisnis", + "业务问答": "Tanya Jawab Bisnis", + "业务域": "Domain Bisnis", + "页": "Halaman", + "页面标题": "Judul Halaman", + "页面类型": "Jenis Halaman", + "页面路径": "Path Halaman", + "页面摘要": "Ringkasan Halaman", + "页面章节": "Bagian Halaman", + "一次测试能变成下一轮配置改进。": "Setiap pengujian dapat memperbaiki konfigurasi berikutnya.", + "一次性": "Sekali Pakai", + "一次性 · {1}": "Sekali · {1}", + "一次性 {1}": "Sekali {1}", + "一个文件对应一份独立知识库;回到知识库后可查看文档卡片、知识索引和知识图谱。": "Setiap file menciptakan basis pengetahuan independen. Kembali ke basis pengetahuan untuk melihat kartu dokumen, indeks, dan knowledge graph.", + "一键启动": "Mulai Sekali Klik", + "一条业务请求如何被推进": "Bagaimana permintaan bisnis diproses", + "移除": "Hapus", + "移除 {1}": "Hapus {1}", + "移除附件": "Hapus Lampiran", + "移除失败": "Gagal Menghapus", + "已保存": "Tersimpan", + "已保存 {1}": "Tersimpan {1}", + "已保存工具测试": "Uji Coba Tool Tersimpan", + "已保存文档": "Dokumen Tersimpan", + "已保存知识库": "Basis Pengetahuan Tersimpan", + "已保存知识内容": "Konten Pengetahuan Tersimpan", + "已保存知识图谱": "Knowledge Graph Tersimpan", + "已触发后台执行": "Eksekusi Background Dipicu", + "已创建": "Dibuat", + "已创建独立任务会话,后台开始执行": "Sesi tugas independen dibuat; eksekusi background dimulai", + "已创建知识库和入库任务": "Basis Pengetahuan dan Tugas Ingestion Telah Dibuat", + "已从当前员工移除": "Dihapus dari Karyawan Saat Ini", + "已从广场同步": "Tersinkron dari Pasar", + "已从广场下架": "Lepas dari Pasar", + "已从广场移除": "Dihapus dari Pasar", + "已存在": "Sudah Ada", + "已存在同名文件": "File dengan nama yang sama sudah ada", + "已导出知识库备份包": "Paket cadangan basis pengetahuan telah diekspor.", + "已导入": "Diimpor", + "已导入知识库备份包": "Paket cadangan basis pengetahuan telah diimpor.", + "已读取": "Dibaca", + "已读取 {1}": "Dibaca {1}", + "已读取 {1} 个文件{2}": "Dibaca {1} file{2}", + "已发布": "Diterbitkan", + "已发布到广场": "Diterbitkan ke Marketplace", + "已发布到广场,可在对话端直接使用。": "Diterbitkan ke Marketplace dan tersedia langsung di Chat.", + "已发送取消请求": "Mengirim permintaan pembatalan", + "已返回": "Dikembalikan", + "已复制": "Disalin", + "已复制 {1} 个 SOP{2}": "Menyalin {1} SOP{2}", + "已复制 {1} 个工具{2}": "Menyalin {1} Alat{2}", + "已复制 {1} 个技能": "Menyalin {1} Keterampilan", + "已复制 {1} 个知识库{2}": "Menyalin {1} Basis Pengetahuan{2}", + "已回复,原会话会继续执行": "Dibalas, percakapan asli akan melanjutkan eksekusi", + "已回滚到 {1}": "Dikembalikan ke {1}", + "已加入发送队列": "Masuk Antrian Pengiriman", + "排队内容过大,刷新页面后可能无法恢复": "Konten antrian terlalu besar untuk dipulihkan setelah menyegarkan halaman", + "已加载「{1}」。你可以在右侧选择一个或多个区域,然后在这里描述需要怎样改写。": "Memuat “{1}”. Pilih satu atau lebih bagian di kanan, lalu jelaskan bagaimana cara menulis ulangnya.", + "已拒绝": "Ditolak", + "已拒绝改写并还原": "Rewrite Ditolak dan Dikembalikan", + "已拒绝建议": "Saran ditolak", + "已命中": "Cocok", + "已默认": "Default", + "已匹配工具:{1}": "Alat cocok: {1}", + "已匹配现有工具": "Alat yang sudah ada cocok", + "已匹配现有工具:{1}": "Alat yang sudah ada cocok: {1}", + "已启用": "Aktif", + "已启用技能": "Keterampilan diaktifkan", + "已清空 {1} 条记忆": "Menghapus {1} entri memori.", + "已取消": "Dibatalkan", + "已取消导入": "Impor dibatalkan", + "已取消入库任务": "Tugas pengindeksan dibatalkan", + "已确认": "Dikonfirmasi", + "已确认 {1} 个工具,当前草稿已局部更新": "Mengonfirmasi {1} alat. Draf saat ini telah diperbarui sebagian.", + "已确认,等待其他工具建议处理完成后统一更新 SOP": "Dikonfirmasi. SOP akan diperbarui setelah semua saran alat lainnya selesai diproses.", + "已确认改写": "Rewrite Dikonfirmasi", + "已确认建议": "Saran dikonfirmasi", + "已入库引用来源": "Sumber kutipan telah diindeks", + "已删除": "Dihapus", + "已删除的定时任务不能运行": "Tugas terjadwal yang sudah dihapus tidak dapat dijalankan", + "已删除的定时任务不能重新启用": "Tugas terjadwal yang sudah dihapus tidak dapat diaktifkan kembali", + "已删除工具": "Alat dihapus", + "已删除技能": "Keterampilan dihapus", + "已删除知识库": "Basis pengetahuan dihapus", + "已上传 {1}": "Diunggah {1}", + "已上线": "Online", + "已上线知识库": "Basis pengetahuan online", + "已设为默认": "Ditetapkan sebagai default", + "已生成 SOP 草稿:{1}": "Membuat draf SOP: {1}", + "已生成「{1}」草稿。你可以在右侧选择一个或多个区域继续改写。": "Membuat draf “{1}”. Pilih satu atau lebih bagian di kanan untuk melanjutkan penulisan ulang.", + "已跳过": "Dilewati", + "已停用": "Nonaktif", + "已停用技能": "Keterampilan dinonaktifkan", + "已停止": "Berhenti", + "已停止改写": "Rewrite Dihentikan", + "已停止生成": "Pembuatan dihentikan", + "已同步": "Disinkronkan", + "已完成": "Selesai", + "已完成的定时任务可编辑后重新启用": "Tugas terjadwal yang sudah selesai dapat diedit dan diaktifkan kembali.", + "已完成改写。": "Rewrite Selesai.", + "已完成局部改写。": "Penulisan ulang sebagian selesai.", + "已完成思考": "Pemikiran selesai", + "已下线": "Offline", + "已下线知识库": "Basis pengetahuan offline", + "已新增": "Ditambahkan", + "已新增 {1}": "Ditambahkan {1}", + "已移除": "Dihapus", + "已移除技能": "Keterampilan dihapus", + "已移除知识库": "Basis pengetahuan dihapus", + "已暂停": "Dijeda", + "已执行": "Dieksekusi", + "已重命名": "Diubah namanya", + "已重新提交后台分析": "Analisis Background Diajukan Ulang", + "已转为草稿": "Dikonversi ke draf", + "以当前数字员工的口吻回复。提交后,原会话会继续推进 SOP 流程。": "Balas dengan suara karyawan digital saat ini. Setelah dikirim, percakapan asli akan melanjutkan alur SOP.", + "引用": "Kutipan", + "引用来源": "Sumber Kutipan", + "引用来源包 {1}": "Paket Sumber Kutipan {1}", + "引用来源内容": "Isi Sumber Kutipan", + "引用来源摘要": "Ringkasan Sumber Kutipan", + "引用片段": "Cuplikan Kutipan", + "引用详情": "Detail Kutipan", + "隐藏密码": "Sembunyikan Kata Sandi", + "应用样例参数": "Terapkan Parameter Contoh", + "用测试参数直接调用已保存工具,检查员工后续调用时的实际返回。": "Panggil alat yang sudah disimpan dengan parameter pengujian untuk memverifikasi apa yang akan diterima karyawan pada panggilan berikutnya.", + "用对话日志、Trace、反馈分析和事件记录串起路由、工具调用、回复与改进线索,失败后能定位到具体环节。": "Hubungkan routing, panggilan alat, balasan, dan bukti perbaikan dengan log percakapan, Trace, analisis umpan balik, dan peristiwa sehingga kegagalan dapat dilacak ke tahap spesifik.", + "用户": "Pengguna", + "用户 ID": "ID Pengguna", + "用户名": "Pengguna", + "用户名、用户 ID、记忆内容": "Pengguna, ID Pengguna, Isi Memori", + "用户明确拒绝后进入": "Masuk setelah pengguna secara eksplisit menolak", + "用户明确确认后进入": "Masuk setelah pengguna secara eksplisit mengonfirmasi", + "用户消息": "Pesan Pengguna", + "用户选择了创建定时任务模式": "Pengguna memilih mode membuat tugas terjadwal", + "用户已拒绝": "Pengguna menolak", + "用户已确认": "Pengguna mengonfirmasi", + "用户已停止生成": "Pengguna menghentikan pembuatan", + "用户ID": "ID Pengguna", + "用节点、必填信息、允许动作、中断策略和回复规则描述流程;已满足的信息不重复追问,只推进真正缺失的部分。": "Gambarkan alur dengan node, informasi wajib, tindakan yang diizinkan, strategi interupsi, dan aturan balasan. Informasi yang sudah dipenuhi tidak ditanyakan ulang, hanya bagian yang benar-benar hilang yang didorong.", + "用一句话描述,例如:报文已获取后进入": "Jelaskan dalam satu kalimat, misalnya: masuk setelah pesan berhasil diterima.", + "用一句话描述什么时候进入,例如:用户已经提供商品名称后进入": "Jelaskan kapan harus masuk dalam satu kalimat, misalnya: masuk setelah pengguna memberikan nama produk.", + "用于检查当前知识库的知识图谱结构,发现断链、孤立页、重复主题等问题。检查结果仅作参考,不会自动修改数据。": "Memeriksa struktur grafik pengetahuan basis pengetahuan saat ini untuk menemukan tautan putus, halaman terisolasi, topik duplikat, dan masalah lainnya. Hasil pemeriksaan hanya sebagai referensi dan tidak memodifikasi data secara otomatis.", + "用于路由和接口路径,例如 weather-zh": "Digunakan untuk routing dan jalur endpoint, misalnya weather-zh.", + "用于数字员工档案页顶部展示的 system prompt 摘要": "Ringkasan system prompt yang ditampilkan di bagian atas halaman profil karyawan digital", + "用于员工选择技能时的说明": "Deskripsi yang ditampilkan saat karyawan memilih keterampilan ini", + "用真实表达试跑": "Uji Coba dengan Bahasa Pengguna Nyata", + "优先级": "Prioritas", + "右侧已更新预览,等待确认或拒绝": "Pratinjau di kanan telah diperbarui, menunggu konfirmasi atau penolakan", + "预算口径": "Definisi Anggaran", + "员": "K", + "员工": "Karyawan", + "员工:岗位边界明确,资源绑定清楚,状态可管理。": "Karyawan: batas peran jelas, pengikatan sumber daya transparan, dan status dapat dikelola.", + "员工操作": "Tindakan Karyawan", + "员工档案": "Profil Karyawan", + "员工岗位描述": "Deskripsi Posisi Karyawan", + "员工工具": "Alat Karyawan", + "员工会话": "Sesi Karyawan", + "员工记忆": "Memori Karyawan", + "员工记忆分页": "Paginasi Memori Karyawan", + "员工记忆详情": "Detail Memori Karyawan", + "员工能按业务规则推进,而不是自由发挥。": "Karyawan mengikuti aturan bisnis, bukan bertindak sesuka hati.", + "员工能力": "Kemampuan Karyawan", + "员工头像已更新": "Avatar Karyawan Diperbarui", + "员工信息": "Informasi Karyawan", + "员工已删除": "Karyawan Dihapus", + "员工已上线": "Karyawan Online", + "员工已下线": "Karyawan Offline", + "员工在对话中的角色、人设、回复风格和执行边界": "Peran, persona, gaya balasan, dan batas eksekusi karyawan dalam percakapan", + "员工总数": "Total Karyawan", + "原始资料": "Materi Sumber", + "原因:": "Alasan:", + "源码": "Kode Sumber", + "允许动作": "Tindakan yang diizinkan", + "运行": "Jalankan", + "运行闭环": "Siklus Eksekusi", + "运行测试": "Jalankan Uji", + "运行测试 / 版本 / 发布": "Jalankan Uji / Versi / Terbitkan", + "运行层": "Lapisan Runtime", + "运行超时": "Batas Waktu Eksekusi", + "运行代码": "Jalankan Kode", + "运行后端测试": "Jalankan Uji Backend", + "运行后将在这里显示回复、执行流程、代码和输出": "Setelah dijalankan, balasan, alur eksekusi, kode, dan output akan muncul di sini.", + "运行结果": "Hasil Jalankan", + "运行流已结束,但未收到最终结果": "Alirian eksekusi telah berakhir, tetapi hasil akhir belum diterima.", + "运行失败": "Jalankan Gagal", + "运行输出": "Keluaran Jalankan", + "运行完成": "Jalankan Selesai", + "运行中": "Sedang Berjalan", + "运营:日志、Trace、反馈、记忆能形成闭环。": "Operasi: log, Trace, umpan balik, dan memori membentuk siklus tertutup.", + "运营闭环": "Siklus Operasi", + "运营常驻员工": "Karyawan Tetap Operasi", + "再次测试": "Uji Lagi", + "在 Node": "Di Node", + "在线": "Online", + "在线员工": "Karyawan Online", + "在最后新增节点": "Tambah Node di Akhir", + "在最前新增节点": "Tambah Node di Awal", + "在左侧输入说明或上传文档后开始生成": "Masukkan instruksi atau unggah dokumen di sebelah kiri untuk mulai membuat.", + "暂停": "Jeda", + "暂无": "Tidak Ada", + "暂无 目录索引 目录": "Belum ada direktori indeks", + "暂无 MCP 服务器": "Belum ada server MCP", + "暂无 SOP": "Belum Ada SOP", + "暂无 SOP 草稿": "Belum Ada Draf SOP", + "暂无 SOP,点击「新增」创建一个吧": "Belum Ada SOP. Klik \"Tambah\" untuk Membuat.", + "暂无 Trace": "Belum Ada Trace", + "暂无版本记录": "Belum ada riwayat versi", + "暂无成长轨迹": "Belum ada riwayat perkembangan", + "暂无待回答消息": "Belum ada pesan yang menunggu balasan", + "暂无定时任务": "Belum Ada Tugas Terjadwal", + "暂无对话任务": "Belum Ada Tugas Percakapan", + "暂无对话日志": "Belum Ada Log Percakapan", + "暂无工具": "Belum Ada Alat", + "暂无工具,点击「新增」创建一个吧": "Belum Ada Alat. Klik \"Tambah\" untuk Membuat.", + "暂无回复": "Belum ada balasan", + "暂无记忆": "Belum Ada Memori", + "暂无技能": "Belum Ada Keterampilan", + "暂无技能,点击「新增」创建一个吧": "Belum Ada Keterampilan. Klik \"Tambah\" untuk Membuat.", + "暂无节点说明": "Belum ada deskripsi node", + "暂无结构差异": "Tidak Ada Perbedaan Struktur", + "暂无结果": "Belum Ada Hasil", + "暂无开放内容": "Belum Ada Konten Publik", + "暂无可读代表来源": "Belum ada sumber perwakilan yang dapat dibaca.", + "暂无可用模型": "Belum Ada Model yang Tersedia", + "暂无可展示的切片正文,可点击编辑加载完整引用来源。": "Belum ada teks potongan yang dapat ditampilkan. Klik Edit untuk memuat sumber kutipan lengkap.", + "暂无来源路径": "Belum ada jalur sumber", + "暂无历史会话": "Belum Ada Riwayat Sesi", + "暂无描述": "Belum Ada Deskripsi", + "暂无模型": "Belum Ada Model", + "暂无模型,点击「新建模型」添加一个吧": "Belum Ada Model. Klik \"Model Baru\" untuk Menambahkan.", + "暂无目录索引": "Belum ada indeks daftar isi", + "暂无内容": "Belum Ada Konten", + "暂无启用 SOP": "Belum ada SOP yang diaktifkan", + "暂无启用定时任务": "Belum Ada Tugas Terjadwal Aktif", + "暂无启用工具": "Belum ada alat yang diaktifkan", + "暂无启用技能": "Belum ada keterampilan yang diaktifkan", + "暂无缺口": "Tidak Ada Kekurangan", + "暂无上下文摘要": "Belum ada ringkasan konteks", + "暂无数据": "Belum Ada Data", + "暂无数字员工": "Belum Ada Karyawan Digital", + "暂无说明": "Belum Ada Deskripsi", + "暂无文档摘要": "Belum ada ringkasan dokumen", + "暂无引用来源": "Belum ada sumber kutipan", + "暂无原始资料": "Belum ada materi sumber", + "暂无摘要": "Belum ada ringkasan", + "暂无账号": "Belum Ada Akun", + "暂无正文": "Belum ada teks lengkap", + "暂无知识库": "Belum Ada Basis Pengetahuan", + "暂无知识库,点击「新增」创建一个吧": "Belum Ada Basis Pengetahuan. Klik \"Tambah\" untuk Membuat.", + "暂无知识图谱": "Belum Ada Grafik Pengetahuan", + "暂无执行记录": "Belum Ada Catatan Eksekusi", + "摘要": "Ringkasan", + "展开": "Perluas", + "展开边栏": "Perluas Sidebar", + "展开来源 {1}": "Tampilkan Sumber {1}", + "展开内部索引": "Tampilkan Indeks Internal", + "展示工具调用": "Tampilkan Panggilan Alat", + "展示名称": "Nama Tampilan", + "展示设置已保存": "Pengaturan Tampilan Tersimpan", + "展示思考状态": "Tampilkan Status Pemikiran", + "展示执行技能": "Tampilkan Eksekusi Keterampilan", + "章节": "Bab", + "长期上下文": "Konteks Jangka Panjang", + "掌握方向": "Area Fokus", + "账号": "Akun", + "账号操作": "Tindakan Akun", + "账号分页": "Paginasi Akun", + "账号管理": "Manajemen Akun", + "账号角色": "Peran Akun", + "账号列表": "Daftar Akun", + "账号输入错误": "Input Akun Salah", + "账号已创建": "Akun Dibuat", + "账号已更新": "Akun Diperbarui", + "账号已删除": "Akun Dihapus", + "账户菜单": "Menu Akun", + "这不是单次 demo,而是一条最短运营闭环:配置、验证、复盘、沉淀。": "Ini bukan demo sekali pakai, melainkan siklus operasi terpendek: konfigurasi, validasi, evaluasi, dan retensi.", + "这个动作已经添加过了": "Tindakan ini sudah ditambahkan", + "这会把当前数字员工的本地版本发布为广场可复用的 SOP 新版本。": "Ini menerbitkan versi lokal karyawan digital saat ini sebagai versi SOP baru yang dapat digunakan kembali di Marketplace.", + "这些不是跳转入口,而是配置时应当检查的对象和验收标准。": "Ini bukan pintu navigasi, melainkan item pemeriksaan konfigurasi dan kriteria penerimaan.", + "这一步需要你处理": "Langkah ini membutuhkan input Anda", + "这只会在当前数字员工中隐藏该 SOP;开放广场和其他数字员工仍然保留。": "Ini hanya menyembunyikan SOP untuk karyawan digital saat ini. Marketplace dan karyawan digital lainnya tetap memilikinya.", + "这只会在当前数字员工中隐藏该技能;开放广场和其他数字员工仍然保留。": "Ini hanya menyembunyikan keterampilan untuk karyawan digital saat ini. Marketplace dan karyawan digital lainnya tetap memilikinya.", + "这只会在当前数字员工中隐藏该知识库;开放广场和其他数字员工仍然保留。": "Ini hanya menyembunyikan basis pengetahuan untuk karyawan digital saat ini. Marketplace dan karyawan digital lainnya tetap memilikinya.", + "真正能落地的企业 AI,需要知道它做了什么、为什么这么做、哪里失败、下一次如何改。": "AI perusahaan yang benar-benar dapat diterapkan harus menunjukkan apa yang dilakukannya, mengapa melakukannya, di mana gagal, dan bagaimana memperbaikinya di waktu berikutnya.", + "整理 {1} 条证据": "Mengorganisir {1} Bukti", + "整理引用来源包": "Mengorganisir Paket Sumber Kutipan", + "正在按目录索引和知识图谱检索,并整理引用来源...": "Mengambil berdasarkan indeks daftar isi dan grafik pengetahuan, lalu mengorganisir sumber kutipan...", + "正在编辑节点说明": "Edit Node Description", + "正在测试工具接口": "Menguji Endpoint Alat", + "正在整理上下文": "Mengorganisir Konteks Percakapan", + "正在抽取工具:{1}": "Mengekstrak Alat: {1}", + "正在处理": "Sedang Diproses", + "正在处理...": "Sedang Diproses...", + "正在调用 {1}": "Memanggil {1}", + "正在反思": "Merefleksikan", + "正在改写选中内容": "Menulis Ulang Konten Terpilih", + "正在加载待回答消息": "Memuat pesan yang menunggu balasan", + "正在解码技能结构": "Mendekode Struktur Keterampilan", + "正在理解技能目标与输入信息": "Memahami Target Keterampilan dan Informasi Input", + "正在生成 SOP 草稿": "Membuat draf SOP", + "正在思考": "Berpikir", + "正在学习": "Belajar", + "正在运行技能...": "Menjalankan keterampilan...", + "正在执行": "Sedang Dieksekusi", + "证据优先": "Bukti Utama", + "之间新增节点": "Tambah Node Di Antara", + "支持 doc/docx/txt/md/html/pdf;旧版 doc 会提示转换为 docx。": "Mendukung doc, docx, txt, md, html, dan pdf. File doc lama akan diminta untuk dikonversi ke docx.", + "支持常见图片格式,会自动裁剪为方形头像。": "Format gambar umum didukung dan secara otomatis dipotong menjadi avatar persegi.", + "支持对话": "Mendukung Percakapan", + "支持开源平台地址、GitHub repo/tree/raw SKILL.md 或 owner/repo 形式。本地 zip 或 Markdown 文件请在编辑页使用「导入 > 选择文件」。": "Mendukung URL platform sumber terbuka, URL GitHub repo/tree/raw SKILL.md, dan format owner/repo. Untuk file zip atau Markdown lokal, gunakan “Impor > Pilih File” di halaman edit.", + "知": "P", + "知识:文档解析完成,能命中引用,口径可复查。": "Pengetahuan: dokumen telah diurai, kutipan dapat diambil, dan standar dapat ditinjau.", + "知识层级说明": "Deskripsi Hierarki Pengetahuan", + "知识范围": "Cakupan Pengetahuan", + "知识检索": "Pencarian Pengetahuan", + "知识检索失败": "Pengambilan Pengetahuan Gagal", + "知识口径漂移": "Drift Pengetahuan", + "知识库": "Basis Pengetahuan", + "知识库 -> 引用回复 -> 反馈分析 -> 知识更新": "Basis Pengetahuan -> Balasan Kutipan -> Analisis Umpan Balik -> Pembaruan Pengetahuan", + "知识库 / 新建": "Basis Pengetahuan / Baru", + "知识库操作": "Tindakan Basis Pengetahuan", + "知识库广场": "Pasar Basis Pengetahuan", + "知识库广场列表": "Daftar Pasar Basis Pengetahuan", + "知识库列表": "Daftar Basis Pengetahuan", + "知识库没有引用怎么办?": "Bagaimana jika basis pengetahuan tidak memiliki kutipan?", + "知识库描述": "Deskripsi Basis Pengetahuan", + "知识库名称": "Nama Basis Pengetahuan", + "知识库统计": "Statistik Basis Pengetahuan", + "知识库详情": "Detail Basis Pengetahuan", + "知识库总数": "Total Basis Pengetahuan", + "知识来源": "Sumber Pengetahuan", + "知识链接与引用": "Tautan dan Kutipan Pengetahuan", + "知识缺失": "Pengetahuan Hilang", + "知识图谱": "Grafik Pengetahuan", + "知识图谱 {1}": "Grafik Pengetahuan {1}", + "知识图谱标题": "Judul Grafik Pengetahuan", + "知识图谱检查": "Pemeriksaan Grafik Pengetahuan", + "知识图谱检查:{1}": "Pemeriksaan Grafik Pengetahuan: {1}", + "知识图谱检查失败": "Pemeriksaan Grafik Pengetahuan Gagal", + "知识图谱检查通过": "Pemeriksaan Grafik Pengetahuan Berhasil", + "知识图谱以结构化文本保存,标题和摘要会同步写入内容。": "Grafik pengetahuan disimpan sebagai teks terstruktur, dengan judul dan ringkasan yang disinkronkan ke dalam konten.", + "知识图谱引用": "Kutipan Grafik Pengetahuan", + "知识图谱引用 {1}": "Kutipan Grafik Pengetahuan {1}", + "知识图谱元信息": "Metadata Grafik Pengetahuan", + "知识图谱源码": "Kode Sumber Grafik Pengetahuan", + "知识详情": "Detail Pengetahuan", + "知识引用": "Kutipan Pengetahuan", + "知识引用、长期记忆、会话状态和反馈结果进入下一次决策。": "Kutipan pengetahuan, memori jangka panjang, status percakapan, dan hasil umpan balik masuk ke keputusan berikutnya.", + "知识与工具调用": "Pengetahuan dan Panggilan Alat", + "知识运营": "Operasional Pengetahuan", + "知识运营员工": "Karyawan Operasional Pengetahuan", + "执行": "Eksekusi", + "执行并复盘": "Eksekusi dan Tinjau", + "执行规范": "Standar Eksekusi", + "执行计划": "Rencana Eksekusi", + "执行记录": "Catatan Eksekusi", + "执行记录分页": "Paginasi Catatan Eksekusi", + "执行记录与展示设置": "Catatan Eksekusi dan Pengaturan Tampilan", + "执行流程": "Alur Eksekusi", + "执行内容": "Konten Eksekusi", + "执行日期": "Tanggal Eksekusi", + "执行失败": "Eksekusi Gagal", + "执行失败 {1}": "Eksekusi Gagal {1}", + "执行时间": "Waktu Eksekusi", + "执行通用技能": "Eksekusi Keterampilan Umum", + "执行遇到问题": "Eksekusi Mengalami Masalah", + "执行中": "Sedang Dieksekusi", + "职位": "Jabatan", + "只给员工接入它真正需要的工具,例如订单查询、商品购买、内部查询或知识检索。": "Hubungkan hanya alat yang benar-benar dibutuhkan karyawan, seperti pencarian pesanan, pembelian produk, kueri internal, atau pencarian pengetahuan.", + "只有管理员可以编辑技能广场内容": "Hanya administrator yang dapat mengedit konten Marketplace Keterampilan", + "至少需要保留一个节点": "Setidaknya satu node harus dipertahankan.", + "制度问答": "Tanya Jawab Kebijakan", + "治理与复盘": "Tata Kelola dan Tinjauan", + "终止": "Hentikan", + "终止节点": "Node Terminal", + "重命名": "Ganti Nama", + "重命名会话": "Ganti Nama Sesi", + "重命名文件": "Ganti Nama Berkas", + "重试策略": "Strategi percobaan ulang", + "重新编辑会回到这条消息发送前的 SOP 草稿,并截断之后的推理记录。": "Mengedit ulang akan mengembalikan draf SOP dari sebelum pesan ini dikirim dan memotong catatan penalaran setelahnya.", + "重新编辑这条消息?": "Edit ulang pesan ini?", + "重新调用工具": "Panggil Ulang Alat", + "重新分析": "Analisis Ulang", + "重新分析失败": "Analisis Ulang Gagal", + "重新生成代码": "Buat Ulang Kode", + "重置": "Atur Ulang", + "周报": "Laporan Mingguan", + "周二": "Selasa", + "周六": "Sabtu", + "周期巡检、周报、异常提醒和待办跟进可以配置为定时任务,让员工在后台持续推进。": "Konfigurasikan inspeksi berkala, laporan mingguan, peringatan anomali, dan tindak lanjut sebagai tugas terjadwal agar karyawan terus bekerja di latar belakang.", + "周日": "Minggu", + "周三": "Rabu", + "周四": "Kamis", + "周五": "Jumat", + "周一": "Senin", + "主题": "Topik", + "主页链接": "Tautan Beranda", + "转人工": "Serahkan ke Manusia", + "转人工处理": "Serahkan ke Manusia", + "转为草稿": "Konversi ke Draf", + "转为草稿失败": "Gagal Mengkonversi ke Draf", + "状态": "Status", + "状态:": "Status:", + "状态筛选": "Filter Status", + "追问文案": "Tindak Lanjut Pertanyaan", + "追踪与反馈": "Pelacakan dan Umpan Balik", + "准备 OpenAI 兼容模型、单端口服务和 demo 租户数据,让企业端、对话端、API 文档在同一个本地入口下运行。": "Siapkan model kompatibel OpenAI, layanan satu port, dan data penyewa demo agar konsol, chat, dan dokumentasi API berjalan dari satu titik masuk lokal.", + "资格查询": "Pencarian Kelayakan", + "资料": "Pengetahuan", + "资料归档": "Arsip Pengetahuan", + "资料维护": "Pemeliharaan Pengetahuan", + "资料页": "Halaman Pengetahuan", + "子流程": "Sub Alur", + "字段": "Bidang", + "自定义条件": "Kondisi Kustom", + "自定义头像": "Kustom Avatar", + "总榜": "Peringkat Keseluruhan", + "总差评率": "Tingkat Negatif Keseluruhan", + "总好评率": "Tingkat Positif Keseluruhan", + "总是可进入": "Selalu dapat masuk", + "组织默认岗位人设已保存": "Persona Jabatan Default Organisasi Tersimpan", + "最大运行次数": "Jumlah Maksimum Eksekusi", + "最底层可读知识页,回答时基于页面内容并追溯引用来源": "Halaman pengetahuan terbawah yang dapat dibaca, digunakan untuk menjawab berdasarkan isi halaman dengan kutipan yang dapat ditelusuri.", + "最多重试": "Percobaan Ulang Maksimum", + "最后更新:": "Pembaruan Terakhir:", + "最近": "Terbaru", + "最近更新": "Pembaruan Terakhir", + "最近结果": "Hasil Terakhir", + "最近内容": "Konten Terakhir", + "最终回复": "Balasan Akhir", + "作为唯一标识,仅支持字母/数字/下划线;中文将自动转拼音,最长 15 字符。": "Sebagai pengenal unik, hanya mendukung huruf/angka/garis bawah. Bahasa Cina akan otomatis dikonversi ke pinyin, maksimal 15 karakter.", + "做归档": "Arsipkan", + "Agent 调试": "Debug Agent", + "Enter 发送 / Shift+Enter 换行": "Enter untuk kirim / Shift+Enter untuk baris baru", + "GET 会把这里的字段作为查询参数追加到 URL;参数值填写未编码原文,例如 timezone 用 Asia/Shanghai。": "GET menambahkan field di sini sebagai parameter kueri ke URL. Isi nilai parameter dengan teks yang belum dienkoding, misalnya Asia/Shanghai untuk timezone.", + "Headers 或 Env 不是合法 JSON": "Headers atau Env bukan JSON yang valid.", + "HTTP 工具": "Alat HTTP", + "HTTP 接口": "Endpoint HTTP", + "JSON 配置格式不正确,请检查 Headers、Auth、Schema 或 MCP Config": "Format konfigurasi JSON tidak valid. Periksa Headers, Auth, Schema, atau MCP Config.", + "MCP 服务": "Layanan MCP", + "MCP 服务器": "Server MCP", + "MCP 服务器(工具集)": "Server MCP (Set Alat)", + "MCP 服务器列表": "Daftar Server MCP", + "MCP 工具": "Alat MCP", + "MCP/浏览器": "MCP/Browser", + "PilotDeck 把能力分成 WorkSpace、Router、Memory、Always On、Gateway;StaffDeck 对应到企业数字员工场景,重点是岗位边界、知识治理、流程执行、工具调用和运营复盘。": "PilotDeck membagi kemampuan menjadi WorkSpace, Router, Memory, Always On, dan Gateway. StaffDeck menerapkannya pada skenario karyawan digital perusahaan dengan fokus pada batas jabatan, tata kelola pengetahuan, eksekusi alur kerja, panggilan alat, dan evaluasi operasi.", + "Router 判断": "Router Menentukan", + "Router、Agent Loop、Skill Runtime 和 Response Generator 推进任务。": "Router, Agent Loop, Skill Runtime, dan Response Generator Mendorong Tugas.", + "Schema / 测试 / 调用日志": "Schema / Uji / Log Panggilan", + "SKILL.md 是技能入口,不能删除": "SKILL.md adalah titik masuk keterampilan dan tidak dapat dihapus.", + "SOP / 技能推进": "SOP / Kemajuan Keterampilan", + "SOP 版本": "Versi SOP", + "SOP 操作": "Tindakan SOP", + "SOP 调用": "Panggilan SOP", + "SOP 分页": "Paginasi SOP", + "SOP 广场": "Pasar SOP", + "SOP 广场列表": "Daftar Pasar SOP", + "SOP 进化": "Evolusi SOP", + "SOP 列表": "Daftar SOP", + "SOP 名称": "Nama SOP", + "SOP 排行": "Peringkat SOP", + "SOP 为什么重复追问?": "Mengapa SOP mengulang pertanyaan tindak lanjut?", + "SOP 问题": "Masalah SOP", + "SOP 已保存": "SOP Tersimpan", + "SOP 已保存,当前改写已清空": "SOP Tersimpan dan Penulisan Ulang Saat Ini Telah Dihapus", + "SOP 执行": "Eksekusi SOP", + "SOP ID 已存在,已另存为 {1}": "ID SOP sudah ada dan telah disimpan sebagai {1}", + "SOP:节点、槽位、允许动作和回复规则明确。": "SOP: Node, Slot, Tindakan yang Diizinkan, dan Aturan Balasan Ditetapkan dengan Jelas.", + "SOP名称": "Nama SOP", + "StaffDeck 产品预览": "Pratinjau Produk StaffDeck", + "Stdio(本地命令)": "Stdio (Perintah Lokal)", + "Temperature 与 Max Tokens 必须是数字": "Temperature dan Max Tokens harus berupa angka", + "Trace / 反馈 / 记忆": "Trace / Umpan Balik / Memori", + "Trace 分页": "Paginasi Trace", + "Trace 展示路由、槽位和工具调用": "Trace Menampilkan Routing, Slot, dan Panggilan Alat", + "Trace、事件日志和反馈分析让每次执行都能被追踪和改进。": "Trace, log peristiwa, dan analisis umpan balik memastikan setiap eksekusi dapat dilacak dan ditingkatkan.", + "StaffDeck 把模型、数字员工、知识库、技能、SOP、工具、记忆、定时任务和 Trace 放到一条链路里, 让企业拥有可配置、可验证、可复盘的业务流程对话系统。": "StaffDeck menghubungkan model, karyawan digital, basis pengetahuan, keterampilan, SOP, alat, memori, tugas terjadwal, dan Trace menjadi satu rangkaian, sehingga perusahaan memiliki sistem percakapan alur kerja yang dapat dikonfigurasi, divalidasi, dan dievaluasi.", + "StaffDeck 单页文档目录": "Direktori Dokumen Halaman Tunggal StaffDeck", + "StaffDeck 的对话不是单轮问答。它会在路由、知识、技能、SOP、工具和回复生成之间形成可追踪执行链路。": "Percakapan StaffDeck bukan tanya jawab satu putaran. Percakapan membentuk rantai eksekusi yang dapat dilacak melalui routing, pengetahuan, keterampilan, SOP, alat, dan pembuatan balasan.", + "StaffDeck 的核心不是“能聊天”,而是让一个真实岗位拥有自己的配置、资源、执行规则和运营记录。 每个员工都可以有独立知识、SOP、工具和记忆;每次对话都能回看路由、工具调用、回复和反馈。": "Inti StaffDeck bukan “bisa ngobrol”, melainkan memberikan sebuah jabatan nyata konfigurasi, sumber daya, aturan eksekusi, dan riwayat operasinya sendiri. Setiap karyawan memiliki pengetahuan, SOP, alat, dan memori yang independen, dan setiap percakapan dapat ditinjau kembali dari routing, panggilan alat, balasan, hingga umpan balik.", + "由文档 {1} 创建": "Dibuat dari Dokumen {1}", + "URL 已包含查询参数时请把 HTTP Method 切换为 GET;POST 会把测试参数作为 JSON Body 发送。": "Jika URL sudah berisi parameter kueri, ubah HTTP Method ke GET. POST mengirim parameter pengujian sebagai JSON body.", + "加入发送队列": "Tambahkan ke Antrean Pengiriman", + "待回答会话仅支持发送人工回复": "Percakapan yang menunggu balasan hanya menerima balasan manusia", + "待回答暂不支持附件,请发送文字回复": "Lampiran tidak didukung untuk balasan yang menunggu; kirimkan balasan teks saja", + "当前账号不能直接向该会话发送消息,请从待回答列表回复": "Akun ini tidak dapat mengirim pesan langsung ke percakapan ini; balas dari daftar Menunggu Balasan", + "还没有可用模型配置,数字员工暂不能调用模型。请先完成模型配置。": "Belum ada konfigurasi model yang tersedia, karyawan digital belum dapat memanggil model. Harap selesaikan konfigurasi model terlebih dahulu.", + "系统管理员尚未配置可用模型,数字员工暂不能调用模型。请联系管理员完成模型配置。": "Administrator sistem belum mengkonfigurasi model yang tersedia, karyawan digital belum dapat memanggil model. Silakan hubungi administrator untuk menyelesaikan konfigurasi model.", + "去配置": "Konfigurasi", + "还没有可用模型配置,发送消息前请先完成模型配置。": "Belum ada konfigurasi model yang tersedia. Silakan konfigurasikan model sebelum mengirim pesan.", + "系统管理员尚未配置可用模型,暂时无法发送消息。请联系管理员完成模型配置。": "Administrator sistem belum mengkonfigurasi model yang tersedia, sehingga pesan belum dapat dikirim. Silakan hubungi administrator untuk menyelesaikan konfigurasi model.", + "配置模型": "Konfigurasi Model", + "模型配置正在加载,请稍后再发送": "Konfigurasi model sedang dimuat, silakan coba kirim lagi nanti", + "无法读取模型配置,请刷新页面后重试": "Tidak dapat memuat konfigurasi model. Segarkan halaman dan coba lagi.", + "系统管理员尚未配置可用模型,请联系管理员完成模型配置": "Administrator sistem belum mengkonfigurasi model yang tersedia. Silakan hubungi administrator untuk menyelesaikan konfigurasi model.", + "请填写配置名称、Provider 和 Model": "Isi nama konfigurasi, Provider, dan Model", + "模型连接失败,请检查配置后重试。": "Koneksi model gagal. Periksa konfigurasi dan coba lagi.", + "模型连接成功。": "Koneksi model berhasil.", + "模型保存或连接测试失败,请检查配置后重试。": "Penyimpanan model atau uji koneksi gagal. Periksa konfigurasi dan coba lagi.", + "需要先配置模型": "Konfigurasi Model Diperlukan", + "当前没有可用模型。完成配置并通过连通性测试后,才能发送对话和执行任务。": "Belum ada model yang tersedia. Setelah konfigurasi lulus uji koneksi, Anda dapat mengirim percakapan dan menjalankan tugas.", + "配置名称": "Nama Konfigurasi", + "例如 https://api.openai.com/v1": "Misalnya https://api.openai.com/v1", + "当前账号没有模型管理权限,请联系管理员完成模型配置和连通性测试。": "Akun ini tidak memiliki izin pengelolaan model. Hubungi administrator untuk mengkonfigurasi dan menguji model.", + "打开模型管理": "Buka Manajemen Model", + "返回对话": "Kembali ke Percakapan", + "稍后配置": "Konfigurasi Nanti", + "正在测试": "Menguji", + "保存并重新测试": "Simpan dan Uji Lagi", + "保存并测试": "Simpan dan Uji", + "欢迎使用 StaffDeck": "Selamat datang di StaffDeck", + "全流程构建与管理平台": "Platform Pembangunan & Manajemen Siklus Penuh", + "像招聘、培养、管理真人员工一样,构建你的数字员工团队。把重复的事情交给数字员工,让自己专注更重要的工作。": "Bangun tim karyawan digital Anda sama seperti merekrut, melatih, dan mengelola karyawan nyata. Delegasikan tugas repetitif ke karyawan digital dan fokus pada pekerjaan yang lebih penting.", + "像管员工一样管AI": "Kelola AI Seperti Mengelola Karyawan", + "每位数字员工都有档案、岗位与成长记录。": "Setiap karyawan digital memiliki profil, posisi, dan catatan pertumbuhan.", + "按流程执行任务": "Jalankan Tugas Mengikuti Alur", + "理解业务而非检索": "Memahami Bisnis, Bukan Sekadar Pencarian", + "核心概念": "Konsep Inti", + "三步搭建你的数字员工": "Tiga Langkah Membangun Karyawan Digital Anda", + "先给它配大脑,再给它配能力,最后上岗对话。": "Pertama berikan otaknya, lalu lengkapi dengan kemampuan, dan akhirnya mulai bekerja.", + "数字员工的大脑,接入 OpenAI 兼容模型即可。": "Otak karyawan digital — hubungkan model apa pun yang kompatibel dengan OpenAI.", + "知识库、技能、SOP、工具,决定它懂什么、会做什么。": "Basis pengetahuan, keterampilan, SOP, dan alat menentukan apa yang diketahui dan dilakukannya.", + "上岗": "Mulai Bekerja", + "创建数字员工并绑定能力,去对话端与它协作。": "Buat karyawan digital, tetapkan kemampuan, dan berkolaborasi dengannya melalui chat.", + "关闭引导": "Tutup panduan", + "上一步": "Langkah sebelumnya", + "下一步": "Langkah berikutnya", + "跳过": "Lewati", + "等待SOP": "Menunggu SOP", + "模型配置加载失败": "Gagal memuat konfigurasi model", + "加载员工工作记录失败": "Gagal memuat catatan kerja karyawan", + "次对话": "percakapan", + "个任务": "tugas", + "新增SOP": "SOP Baru", + "个 SOP": "SOP", + "新增知识": "Pengetahuan Baru", + "个知识": "entri pengetahuan", + "个技能": "keterampilan", + "上一个周期": "Periode sebelumnya", + "下一个周期": "Periode berikutnya", + "当日暂无活动记录": "Tidak ada catatan aktivitas hari ini", + "共": "Total", + "项": "item", + "本周暂无活动记录": "Tidak ada catatan aktivitas minggu ini", + "{1}月1日": "Tanggal 1 Bulan {1}", + "对话{1}条": "{1} percakapan", + "等{1}项": "dan {1} lagi", + "今天": "Hari ini", + "昨天": "Kemarin", + "本周": "Minggu ini", + "上周": "Minggu lalu", + "本月": "Bulan ini", + "上月": "Bulan lalu", + "{1}年": "Tahun {1}", + "{1}年{2}月": "Tahun {1}, Bulan {2}", + "月": "Bulan", + "六": "Sab", + "五": "Jum", + "四": "Kam", + "三": "Rab", + "二": "Sel", + "一": "Sen", + "日": "Min", + "…等": "...dan", + "还有": "dan", + "请输入账号": "Masukkan akun Anda", + "请输入密码": "Masukkan kata sandi Anda", + "额外参数必须是合法的 JSON 对象": "Parameter tambahan harus berupa objek JSON yang valid", + "额外请求参数(extra_body JSON)": "Parameter permintaan tambahan (extra_body JSON)", + "配置模型 API Key": "Konfigurasi API Key Model", + "模型是数字员工的大脑。点击「新建模型」,填写 Base URL、Model 和 API Key 即可接入。": "Model adalah otak karyawan digital. Klik \"Model Baru\", isi Base URL, Model, dan API Key untuk menghubungkannya.", + "创建你的数字员工": "Buat Karyawan Digital Anda", + "在这里新建数字员工,绑定模型、知识库、技能与 SOP,它就正式上岗了。": "Buat karyawan digital di sini, hubungkan model, basis pengetahuan, keterampilan, dan SOP untuk memulai bekerja.", + "开放广场 · 共享与复用": "Plaza Terbuka · Berbagi dan Menggunakan Kembali", + "汇集可共享的 SOP、知识库、技能和工具,新建数字员工时可以直接复制作为起点。": "Kumpulkan SOP, basis pengetahuan, keterampilan, dan alat yang dapat dibagikan, lalu salin sebagai titik awal saat membuat karyawan digital baru.", + "员工档案 · 一目了然": "Profil Karyawan · Semuanya Tercakup", + "查看数字员工的基本信息、能力配置和工作情况,像翻真人员工的档案一样。": "Lihat informasi dasar, konfigurasi kemampuan, dan status kerja karyawan digital seperti membuka profil karyawan nyata.", + "定时任务 · 主动干活": "Tugas Terjadwal · Bekerja Secara Proaktif", + "设置周期任务,数字员工到点自动执行,比如每天早上生成日报。": "Atur tugas berulang agar karyawan digital berjalan otomatis, seperti membuat laporan harian setiap pagi.", + "记忆 · 越用越懂你": "Memori · Makin Paham Seiring Penggunaan", + "数字员工会记住对话中的关键信息,越用越了解你的业务和习惯。": "Karyawan digital mengingat informasi penting dari percakapan dan semakin memahami bisnis serta kebiasaan Anda.", + "知识库 · 沉淀业务知识": "Basis Pengetahuan · Menyimpan Pengetahuan Bisnis", + "上传文档自动沉淀为结构化知识,回答自带出处,业务口径始终一致。": "Unggah dokumen yang otomatis diubah menjadi pengetahuan terstruktur, jawaban dilengkapi sumber, dan standar bisnis tetap konsisten.", + "技能 · 扩展它会做的事": "Keterampilan · Perluas Yang Bisa Dilakukan", + "这里是通用技能(Skills),扩展数字员工会做的事,支持从 GitHub 等开源社区直接导入。": "Gunakan keterampilan umum (Skills) untuk memperluas kemampuan karyawan digital, termasuk impor langsung dari GitHub dan komunitas sumber terbuka lainnya.", + "SOP · 流程型技能": "SOP · Keterampilan Berbasis Proses", + "SOP 是流程型技能:数字员工按步骤执行业务流程,可打断、可恢复,比固定的 workflow 更灵活。一句话描述需求,即可快速生成 SOP。": "SOP adalah keterampilan proses: karyawan digital menjalankan alur kerja bisnis langkah demi langkah, dapat dijeda dan dilanjutkan, lebih fleksibel daripada workflow tetap. Deskripsikan kebutuhan dalam satu kalimat untuk membuat SOP dengan cepat.", + "去对话端开始协作": "Mulai Berkolaborasi di Chat", + "一切就绪!去对话端选择数字员工开始对话": "Semua sudah siap! Pilih karyawan digital di chat dan mulai berkolaborasi.", + "开始对话": "Mulai Percakapan", + "立即添加": "Tambahkan Sekarang", + "请填写名称和 Model": "Isi Nama dan Model", + "API 协议": "Protokol API", + "搜索名称、模型、API 协议或 Base URL": "Cari nama, model, protokol API, atau Base URL", + "请填写配置名称和 Model": "Isi nama konfigurasi dan Model", + "模型测试通过,但首次激活未完成,请刷新后重试。": "Pengujian model berhasil, tetapi aktivasi pertama belum selesai. Muat ulang lalu coba lagi.", + "加载渠道信息失败": "Failed to load channel info", + "加载投递日志失败": "Failed to load delivery logs", + "绑定微信后,该数字员工可直接在微信中接收和回复消息。": "After binding WeChat, this employee can receive and reply to messages directly in WeChat.", + "绑定微信": "Bind WeChat", + "创建渠道绑定失败": "Failed to create channel binding", + "获取微信二维码失败": "Failed to get the WeChat QR code", + "确认绑定状态失败": "Failed to confirm binding status", + "微信绑定成功": "WeChat bound successfully", + "已解绑": "Unbound", + "解绑失败": "Failed to unbind", + "请先选择一个数字员工再配置渠道。": "Select an employee before configuring channels.", + "微信": "WeChat", + "待扫码": "Pending Scan", + "已绑定": "Bound", + "已过期": "Expired", + "已连接": "Connected", + "未连接": "Disconnected", + "会话已过期,请重新扫码绑定。": "Session expired. Please scan the QR code again to rebind.", + "重新扫码": "Scan Again", + "扫码绑定": "Scan to Bind", + "解绑": "Unbind", + "解绑微信渠道?": "Unbind the WeChat channel?", + "解绑后该数字员工将无法继续收发微信消息,可重新扫码绑定。": "After unbinding, this employee can no longer send or receive WeChat messages. You can bind again by scanning a QR code.", + "请使用微信扫描二维码完成绑定": "Scan the QR code with WeChat to finish binding", + "已扫码,请在微信中确认": "Scanned. Please confirm in WeChat", + "二维码已过期,请重新获取": "QR code expired. Please get a new one", + "重新获取二维码": "Refresh QR Code", + "微信绑定二维码": "WeChat binding QR code", + "投递日志": "Delivery Logs", + "暂无投递记录": "No delivery records", + "重试次数": "Retries", + "错误": "Error", + "回复": "Reply", + "错误通知": "Error Notice", + "已送达": "Delivered", + "投递失败": "Delivery Failed", + "待投递": "Pending", + "投递中": "Delivering", + "渠道": "Channels", + "正在获取二维码…": "Fetching QR code…", + "已扫码,请在手机上确认": "Scanned. Please confirm on your phone", + "请在手机微信上查看并输入显示的数字": "Check WeChat on your phone and enter the number shown", + "多次输入错误,请重新扫码": "Too many incorrect attempts. Please scan again", + "该微信已绑定过,已恢复连接": "This WeChat account was already bound. Connection restored", + "刷新二维码": "Refresh QR Code", + "数字验证码": "Numeric code", + "确定": "OK", + "扫码失败时,可复制以下内容手动打开": "If scanning fails, copy the content below and open it manually", + "可调度员工": "Dispatchable Employees", + "暂无可调度员工": "No dispatchable employees", + "暂无可用员工": "No available employees", + "保存可调度员工失败": "Failed to save dispatchable employees", + "微信指令说明": "WeChat Commands", + "查看可调度员工": "List dispatchable employees", + "查看当前员工": "Show current employee", + "查看指令说明": "Show command help", + "/员工": "/employees", + "/切换 <员工名> 或 /<员工名>": "/switch or /", + "/当前": "/current", + "/帮助": "/help", + "渠道接入": "Channels", + "新建渠道绑定": "New Channel Binding", + "暂无渠道绑定,创建后微信用户可通过斜杠指令在多个数字员工之间切换。": "No channel bindings yet. Once created, WeChat users can switch between multiple employees with slash commands.", + "返回列表": "Back to List", + "选择默认员工": "Select Default Employee", + "渠道绑定创建成功": "Channel binding created", + "前往渠道接入页管理": "Manage on the Channels page", + "渠道绑定已升级为租户级管理,这里仅展示挂载了当前员工的渠道账号。": "Channel bindings are now managed at the tenant level. Only channel accounts with the current employee mounted are shown here.", + "当前员工未挂载任何渠道。": "No channels mounted for the current employee.", + "渠道挂载": "Mounted Channels", + "默认员工": "Default Employee", + "请先选择一个数字员工再查看渠道挂载。": "Select an employee to view mounted channels.", + "暂无对话记录": "No conversations", + "群": "Group", + "暂无消息": "No messages", + "{1} 条": "{1}", + "加载对话记录失败": "Failed to load conversations", + "加载会话消息失败": "Failed to load messages", + "来源/用户": "Source / User", + "网页": "Web", + "全部用户": "All Users", + "挂载后,该渠道的所有用户均可与这些员工对话。": "Once mounted, all users of this channel can talk to these employees.", + "绑定我的微信": "Bind My WeChat", + "生成绑定码失败": "Failed to generate bind code", + "绑定码 {1} 分 {2} 秒后过期": "Bind code expires in {1}m {2}s", + "绑定码已过期,请重新生成": "Bind code expired. Please generate a new one", + "重新生成": "Regenerate", + "/绑定 {1}": "/bind {1}", + "请在微信中向你的数字员工发送该指令,完成微信身份绑定。": "Send this command to your employee in WeChat to link your WeChat identity.", + "已绑定:{1}": "Bound: {1}", + "解除绑定": "Unbind", + "已解除绑定": "Identity unbound", + "解除绑定失败": "Failed to unbind", + "接入微信": "Connect WeChat", + "暂无渠道接入,接入后微信用户可通过斜杠指令在多个数字员工之间切换。": "No channels connected yet. Once connected, WeChat users can switch between multiple employees with slash commands.", + "渠道接入创建成功": "Channel connected", + "创建渠道接入失败": "Failed to create channel connection", + "微信接入成功": "WeChat connected", + "该微信已接入过,已恢复连接": "This WeChat account was already connected. Connection restored", + "确认接入状态失败": "Failed to confirm connection status", + "已断开接入": "Disconnected", + "断开接入失败": "Failed to disconnect", + "断开接入": "Disconnect", + "扫码接入": "Scan to Connect", + "会话已过期,请重新扫码接入。": "Session expired. Please scan the QR code again to reconnect.", + "微信接入二维码": "WeChat connection QR code", + "断开微信接入?": "Disconnect WeChat?", + "断开后微信 bot 将离线,需要重新扫码才能恢复;对话记录保留。确定断开接入吗?": "The WeChat bot will go offline after disconnecting and can only be restored by scanning the QR code again. Conversation history is kept. Disconnect?", + "解除微信身份绑定?": "Unbind WeChat identity?", + "解除后,微信对话将与你的账号分离,历史会话与记忆迁回渠道账号。确定解除绑定吗?": "After unbinding, WeChat conversations will be detached from your account, and history sessions and memories will be moved back to the channel account. Unbind?", + "已接入": "Connected", + "请使用微信扫描二维码完成接入": "Scan the QR code with WeChat to finish connecting", + "接入渠道": "Connect Channel", + "选择渠道": "Select Channel", + "返回选择渠道": "Back to Channels", + "暂无可用渠道": "No channels available", + "扫码接入,微信用户直接与数字员工对话。": "Connect by scanning a QR code. WeChat users can chat with your employees directly.", + "填入企业微信智能机器人的凭证完成接入。": "Connect with credentials from a WeCom bot.", + "输入状态": "Typing Indicator", + "凭证已配置": "Credentials configured", + "重新配置": "Reconfigure", + "凭证获取路径:企业微信管理后台 → 智能机器人。": "Get credentials: WeCom admin console → Bot.", + "请填写完整凭证": "Please complete all credential fields", + "保存凭证失败": "Failed to save credentials", + "机器人 ID": "Bot ID", + "机器人 Secret": "Bot Secret", + "恢复中": "Recovering", + "会话恢复中,系统将自动重试": "Session recovery in progress. Retrying automatically", + "智能分发": "Smart Routing", + "开启后,用户消息将按意图自动分发给合适的员工;/切换 仍可手动指定,手动指定后 10 分钟内不自动切换。": "When on, user messages are routed to the right employee by intent. /switch still works manually; after a manual switch, auto-routing pauses for 10 minutes.", + "更新智能分发设置失败": "Failed to update smart routing setting", + "身份绑定": "Identity Binding", + "绑定我的{1}": "Bind my {1}", + "解除身份绑定?": "Unbind identity?", + "解除后,该渠道对话将与你的账号分离,历史会话与记忆迁回渠道账号。确定解除绑定吗?": "After unbinding, conversations on this channel will be detached from your account, and history sessions and memories will be moved back to the channel account. Unbind?", + "请在{1}中向你的数字员工发送以上指令,完成身份绑定。": "Send the command above to your employee in {1} to link your identity.", + "加载更多(已显示 {1} / 共 {2} 条)": "Load more (showing {1} of {2})", + "加载更多天(已显示 {1} / 共 {2} 天)": "Load more days (showing {1} of {2})", + "用于跨企业区分相同 userid;不填则以机器人 ID 区分(删除重建绑定后身份可能断开)": "Distinguishes identical userids across enterprises. If empty, the bot ID is used instead (identity may break after deleting and recreating the binding).", + "企业 ID:{1}": "Corp ID: {1}", + "例如 https://llm-center.modelbest.cn/llm/v1": "Contoh, https://llm-center.modelbest.cn/llm/v1", + "例如 https://llm-center.modelbest.cn/llm": "Contoh, https://llm-center.modelbest.cn/llm", + "测试通过,已启用并设为默认模型": "Pengujian berhasil, diaktifkan dan ditetapkan sebagai model default", + "模型配置或测试状态已发生变化,本次结果未生效,请刷新后重新测试": "Konfigurasi model atau status pengujian telah berubah. Hasil ini tidak berlaku. Muat ulang dan uji ulang.", + "{1} 正在测试": "Menguji {1}", + "企业 ID": "ID Perusahaan", + "企业身份隔离的必要字段,激活后不可在原绑定上修改": "Bidang wajib untuk isolasi identitas perusahaan. Tidak dapat diubah pada binding yang sudah ada setelah aktivasi." +} diff --git a/frontend-enterprise/src/i18n/index.tsx b/frontend-enterprise/src/i18n/index.tsx index db68040..da0db86 100644 --- a/frontend-enterprise/src/i18n/index.tsx +++ b/frontend-enterprise/src/i18n/index.tsx @@ -9,8 +9,9 @@ import { } from 'react'; import englishCatalog from './en.json'; +import indonesianCatalog from './id.json'; -export type AppLocale = 'zh-CN' | 'en-US'; +export type AppLocale = 'zh-CN' | 'en-US' | 'id-ID'; type I18nContextValue = { locale: AppLocale; @@ -26,7 +27,10 @@ type CompiledTemplate = { }; const STORAGE_KEY = 'staffdeck_locale'; -const CATALOG = englishCatalog as Record; +const CATALOGS: Record> = { + 'en-US': englishCatalog as Record, + 'id-ID': indonesianCatalog as Record, +}; const SAFE_ATTRIBUTES = ['placeholder', 'aria-label', 'title', 'alt', 'data-placeholder'] as const; const TEMPLATE_TOKEN = /\{(\d+)\}/g; const textOriginals = new WeakMap(); @@ -35,7 +39,9 @@ const translationCache = new Map(); function initialLocale(): AppLocale { if (typeof window === 'undefined') return 'zh-CN'; - return window.localStorage.getItem(STORAGE_KEY) === 'en-US' ? 'en-US' : 'zh-CN'; + const stored = window.localStorage.getItem(STORAGE_KEY); + if (stored === 'en-US' || stored === 'id-ID') return stored; + return 'zh-CN'; } let currentLocale: AppLocale = initialLocale(); @@ -55,38 +61,48 @@ function escapePattern(value: string): string { const exactCatalog = new Map(); const compiledTemplates: CompiledTemplate[] = []; - -for (const [rawSource, target] of Object.entries(CATALOG)) { - const sources = new Set([rawSource, decodeSourceEntities(rawSource)]); - for (const source of sources) { - if (!source) continue; - exactCatalog.set(source, target); - if (!TEMPLATE_TOKEN.test(source)) { +let builtLocale: AppLocale | null = null; + +function buildCatalog(locale: AppLocale): void { + if (builtLocale === locale) return; + const source = CATALOGS[locale]; + if (!source) return; + exactCatalog.clear(); + compiledTemplates.length = 0; + for (const [rawSource, target] of Object.entries(source)) { + const sources = new Set([rawSource, decodeSourceEntities(rawSource)]); + for (const s of sources) { + if (!s) continue; + exactCatalog.set(s, target); + if (!TEMPLATE_TOKEN.test(s)) { + TEMPLATE_TOKEN.lastIndex = 0; + continue; + } TEMPLATE_TOKEN.lastIndex = 0; - continue; - } - TEMPLATE_TOKEN.lastIndex = 0; - const placeholderOrder: number[] = []; - let cursor = 0; - let pattern = '^'; - for (const match of source.matchAll(TEMPLATE_TOKEN)) { - pattern += escapePattern(source.slice(cursor, match.index)); - pattern += '([\\s\\S]*?)'; - placeholderOrder.push(Number(match[1])); - cursor = (match.index || 0) + match[0].length; + const placeholderOrder: number[] = []; + let cursor = 0; + let pattern = '^'; + for (const match of s.matchAll(TEMPLATE_TOKEN)) { + pattern += escapePattern(s.slice(cursor, match.index)); + pattern += '([\\s\\S]*?)'; + placeholderOrder.push(Number(match[1])); + cursor = (match.index || 0) + match[0].length; + } + pattern += `${escapePattern(s.slice(cursor))}$`; + compiledTemplates.push({ pattern: new RegExp(pattern), placeholderOrder, target }); } - pattern += `${escapePattern(source.slice(cursor))}$`; - compiledTemplates.push({ pattern: new RegExp(pattern), placeholderOrder, target }); } + compiledTemplates.sort((left, right) => right.pattern.source.length - left.pattern.source.length); + builtLocale = locale; + translationCache.clear(); } -compiledTemplates.sort((left, right) => right.pattern.source.length - left.pattern.source.length); - function interpolate(target: string, values: Record): string { return target.replace(TEMPLATE_TOKEN, (_, key: string) => String(values[key] ?? `{${key}}`)); } function translateCore(source: string): string | null { + buildCatalog(currentLocale); if (translationCache.has(source)) return translationCache.get(source) || null; const exact = exactCatalog.get(source); if (exact) { @@ -218,7 +234,9 @@ export function getStoredLocale(): AppLocale { } export function getDateLocale(): string { - return currentLocale === 'en-US' ? 'en-US' : 'zh-CN'; + if (currentLocale === 'en-US') return 'en-US'; + if (currentLocale === 'id-ID') return 'id-ID'; + return 'zh-CN'; } export function I18nProvider({ children }: { children: ReactNode }) { @@ -226,13 +244,16 @@ export function I18nProvider({ children }: { children: ReactNode }) { const setLocale = useCallback((nextLocale: AppLocale) => { currentLocale = nextLocale; + builtLocale = null; + translationCache.clear(); window.localStorage.setItem(STORAGE_KEY, nextLocale); document.documentElement.lang = nextLocale; setLocaleState(nextLocale); }, []); const toggleLocale = useCallback(() => { - setLocale(locale === 'zh-CN' ? 'en-US' : 'zh-CN'); + const next: AppLocale = locale === 'zh-CN' ? 'en-US' : locale === 'en-US' ? 'id-ID' : 'zh-CN'; + setLocale(next); }, [locale, setLocale]); const t = useCallback(