diff --git a/apps/desktop/src/i18n/__tests__/docsNamespaceParity.spec.ts b/apps/desktop/src/i18n/__tests__/docsNamespaceParity.spec.ts index 2c0f6c0512..3c8e2a3903 100644 --- a/apps/desktop/src/i18n/__tests__/docsNamespaceParity.spec.ts +++ b/apps/desktop/src/i18n/__tests__/docsNamespaceParity.spec.ts @@ -2,6 +2,7 @@ import { describe, expect, it } from "vitest"; import az from "../locales/docs/az"; import en from "../locales/docs/en"; import es from "../locales/docs/es"; +import id from "../locales/docs/id"; import it_ from "../locales/docs/it"; import ja from "../locales/docs/ja"; import ko from "../locales/docs/ko"; @@ -21,6 +22,7 @@ import zhTW from "../locales/docs/zh-TW"; const locales: Array<[string, Record]> = [ ["az", az], ["es", es], + ["id", id], ["it", it_], ["ja", ja], ["ko", ko], diff --git a/apps/desktop/src/i18n/locales/dataDictionaryMessages.ts b/apps/desktop/src/i18n/locales/dataDictionaryMessages.ts index 7061c6f3d6..a0b5db6d0f 100644 --- a/apps/desktop/src/i18n/locales/dataDictionaryMessages.ts +++ b/apps/desktop/src/i18n/locales/dataDictionaryMessages.ts @@ -1108,6 +1108,117 @@ export const dataDictionaryRu = { previewFailed: "Could not preview: {error}", }; +export const dataDictionaryId = { + title: "Ekspor Kamus Data", + includeIndexes: "Sertakan indeks dan kunci asing", + loading: "Membaca struktur…", + exporting: "Mengekspor…", + exportFailed: "Tidak dapat mengekspor: {error}", + loadFailed: "Tidak dapat membaca struktur: {error}", + warningTableSkipped: "{table} dilewati: {reason}", + objectUnavailable: "Objek tidak ditemukan saat ekspor.", + warningNoForeignKeys: "{engine} tidak melaporkan kunci asing.", + warningCommentsUnsupported: "{engine} tidak mendukung komentar tabel atau kolom.", + empty: "Tidak ada tabel untuk diekspor.", + column: "Kolom", + type: "Tipe", + length: "Panjang", + precision: "Presisi", + scale: "Skala", + primaryKey: "Kunci utama", + nullable: "Nullable", + unique: "Unik", + defaultValue: "Default", + extra: "Ekstra", + comment: "Komentar", + indexName: "Indeks", + indexColumns: "Kolom", + indexType: "Tipe", + constraintName: "Batasan", + refSchema: "Skema rujukan", + refTable: "Tabel rujukan", + refColumn: "Kolom rujukan", + onUpdate: "ON UPDATE", + onDelete: "ON DELETE", + yes: "Ya", + no: "Tidak", + indexesHeading: "Indeks", + foreignKeysHeading: "Kunci asing", + stepDatabases: "Pilih database dan skema", + stepObjects: "Pilih objek dan urutan", + stepTemplate: "Pilih templat", + stepLayout: "Sesuaikan tata letak", + stepFile: "Jalur file dan buat", + next: "Berikutnya", + back: "Kembali", + start: "Mulai", + databases: "Database", + schemasHeading: "Skema", + noSchemaLevel: "Database ini tidak memiliki skema terpisah.", + searchObjects: "Cari objek", + selectAll: "Semua", + selectNone: "Tidak Ada", + selectedCount: "Urutan ekspor ({count})", + moveUp: "Naik", + moveDown: "Turun", + templateStandard: "Standar", + templateStandardHint: "Sampul, daftar isi, pendahuluan, dan indeks.", + templateDetailed: "Rinci", + templateDetailedHint: "Halaman lanskap dengan indeks, kunci asing, dan pendahuluan yang lebih panjang.", + templateCompact: "Ringkas", + templateCompactHint: "Hanya kolom, tanpa sampul atau daftar isi.", + templateCatalog: "Katalog", + templateCatalogHint: "Sampul dan daftar isi, tanpa indeks.", + templateReference: "Referensi", + templateReferenceHint: "Halaman lanskap besar dengan indeks dan daftar isi.", + includeCover: "Sertakan sampul", + header: "Header", + dictionaryTitle: "Judul", + subtitle: "Subjudul", + remarks: "Catatan", + coverFooter: "Footer sampul", + includeToc: "Sertakan daftar isi", + includeBreadcrumbs: "Sertakan header breadcrumb", + includeLeftFooter: "Sertakan footer kiri", + includePageNumber: "Sertakan nomor halaman", + includeIntroduction: "Sertakan pendahuluan", + introductionDefault: "Kamus data adalah kumpulan metadata seperti nama objek, tipe data, ukuran, dan relasi dengan aset data lainnya.", + detailedIntroduction: "Properti rinci (tipe data, ukuran, nullability, indeks, kunci asing, dan batasan) disusun dalam tabel.", + paper: "Kertas", + orientation: "Orientasi", + portrait: "Potret", + landscape: "Lanskap", + margin: "Margin (cm)", + fontSize: "Ukuran font", + fontSmall: "Kecil", + fontMedium: "Sedang", + fontLarge: "Besar", + exportToFile: "Ekspor ke file", + browse: "Jelajahi", + appendTimestamp: "Tambahkan stempel waktu ke nama file", + overwriteExisting: "Timpa file yang sudah ada", + continueOnError: "Lanjutkan jika terjadi galat", + phasePreparing: "Menyiapkan objek", + phaseCollecting: "Membaca metadata", + phaseGenerating: "Membuat PDF", + phaseSaving: "Menyimpan file", + warningCount: "{count} peringatan", + alreadyRunning: "Ekspor sudah berjalan untuk koneksi ini.", + backgroundStarted: "Ekspor dimulai di tugas latar belakang.", + backgroundDone: "Kamus data diekspor: {path}", + backgroundFailed: "Ekspor kamus data gagal: {error}", + fileExists: "File sudah ada.", + contentsHeading: "Daftar Isi", + kindTable: "Tabel", + kindView: "Tampilan", + kindMaterializedView: "Tampilan terwujud", + loadProfile: "Muat profil", + saveProfile: "Simpan profil", + profileInvalid: "Profil ini tidak dapat dibaca.", + preview: "Pratinjau", + previewFailed: "Tidak dapat menampilkan pratinjau: {error}", +}; + export const dataDictionaryAz = { title: "Məlumat lüğətini ixrac et", includeIndexes: "İndeksləri və xarici açarları daxil et", diff --git a/apps/desktop/src/i18n/locales/docs/id.ts b/apps/desktop/src/i18n/locales/docs/id.ts new file mode 100644 index 0000000000..365351c0b4 --- /dev/null +++ b/apps/desktop/src/i18n/locales/docs/id.ts @@ -0,0 +1,69 @@ +export default { + title: "Dokumentasi", + groupBySchema: "Skema", + groupByTableGroup: "Grup Tabel", + noGroup: "(tanpa grup)", + noSchema: "(tanpa skema)", + search: "Cari tabel, kolom, grup…", + columns: "Kolom", + indexes: "Indeks", + references: "Referensi", + referencedBy: "Dirujuk oleh", + localNote: "LOKAL", + shadowedComment: "Komentar database: {comment}", + addNote: "Tambah catatan", + editNote: "Edit catatan", + newGroup: "Grup baru…", + groupName: "Nama grup", + groupColour: "Warna", + deleteGroup: "Hapus grup", + enumValues: "Nilai", + usedBy: "Digunakan oleh", + openDiagram: "Buka diagram skema", + saving: "Menyimpan…", + saved: "Tersimpan", + saveFailed: "Tidak dapat menyimpan catatan: {error}", + overview: "Ringkasan", + groupBy: "Kelompokkan berdasarkan", + searchLabel: "Cari", + groups: "Grup", + relationships: "Relasi", + columnHeader: "Kolom", + typeHeader: "Tipe", + settingsHeader: "Pengaturan", + noteHeader: "Catatan", + nameHeader: "Nama", + definitionHeader: "Definisi", + noOutgoingRelationships: "Tabel ini tidak merujuk tabel lain.", + noIncomingRelationships: "Tidak ada tabel yang merujuk ke tabel ini.", + diagram: "Diagram", + language: "Bahasa", + theme: "Tema", + themeLight: "Terang", + themeDark: "Gelap", + exportHtml: "Ekspor HTML…", + exporting: "Mengekspor…", + exportFailed: "Tidak dapat mengekspor: {error}", + warnings: { + tableSkipped: { + title: "Satu tabel tidak dapat didokumentasikan", + detail: "{table} dilewati: {reason}. Tabel ini tidak ada dalam dokumentasi ini.", + }, + noForeignKeyMetadata: { + title: "Tidak ada relasi yang tersedia", + detail: "{engine} tidak melaporkan metadata kunci asing, sehingga tidak ada garis relasi yang dapat diturunkan. Diagram ini sudah lengkap untuk mesin database ini.", + }, + commentsUnsupported: { + title: "Komentar database tidak tersedia", + detail: "{engine} tidak mendukung komentar tabel atau kolom, sehingga setiap deskripsi di sini berasal dari catatan proyek ini sendiri.", + }, + orphanedNotes: { + title: "Beberapa catatan tidak lagi cocok dengan apa pun", + detail: "{count} catatan merujuk ke tabel atau kolom yang sudah tidak ada. Tidak ada yang dihapus — petakan ulang atau hapus catatan tersebut di file catatan.", + }, + dbmlOmitted: { + title: "Tidak dapat direpresentasikan dalam DBML", + detail: "{item} pada {table} didokumentasikan di sini tetapi tidak disertakan dalam DBML yang diekspor: {reason}.", + }, + }, +}; diff --git a/apps/desktop/src/i18n/locales/id.ts b/apps/desktop/src/i18n/locales/id.ts index 55389ff091..39e27966db 100644 --- a/apps/desktop/src/i18n/locales/id.ts +++ b/apps/desktop/src/i18n/locales/id.ts @@ -1,6 +1,9 @@ import { withEnglishFallback } from "./fallback"; +import docs from "./docs/id"; +import { dataDictionaryId as dataDictionary } from "./dataDictionaryMessages"; import { consulIdMessages as consul } from "./consulId"; import { sqlServerTraceMessages as sqlServerTrace } from "./sqlServerTraceMessages"; +import { meilisearchManagementId } from "./meilisearchManagement"; export default withEnglishFallback({ cellTransform: { @@ -84,6 +87,8 @@ export default withEnglishFallback({ incomplete: "DDL yang dihasilkan tidak lengkap dan tidak disalin. Buka detail tipe untuk melihat peringatannya.", }, }, + docs, + dataDictionary, pluginPlatform: { dataAccessConsent: '"{name}" ingin membaca data dari koneksi "{connection}". Selama koneksi tersebut terbuka, plugin dapat menjalankan kueri read-only pada koneksi itu hingga Anda mencabut aksesnya di Plugin Center. Izinkan?', dataAccessConsentTitle: "Permintaan Akses Data", @@ -6222,6 +6227,71 @@ export default withEnglishFallback({ partialFailure: "Driver MongoDB Legacy menolak {failed} dari {total} dokumen: {message}", }, }, + meilisearch: { + ...meilisearchManagementId, + documents: "Dokumen", + settings: "Pengaturan", + search: "Cari", + keywordPlaceholder: "Cari dokumen...", + filter: "Filter", + filterPlaceholder: 'status = "published"', + sort: "Urutkan", + sortPlaceholder: "field:asc", + sortHint: "Pisahkan beberapa ekspresi pengurutan dengan koma (,)", + sortNoAttributes: "Tidak ada atribut yang dapat diurutkan dikonfigurasi untuk indeks ini", + sortAsc: "Naik", + sortDesc: "Turun", + limit: "Batas", + offset: "Offset", + resultSummary: "Sekitar {count} hasil · {duration}", + viewJson: "JSON", + viewTable: "Tabel", + viewGrid: "Grid", + empty: "Tidak ada dokumen ditemukan", + editDocument: "Edit dokumen", + deleteDocument: "Hapus dokumen", + deleteDocumentMessage: "Hapus dokumen ini? Tindakan ini tidak dapat dibatalkan.", + documentDeleted: "Dokumen dihapus", + documentSaved: "Dokumen disimpan", + settingsSaved: "Pengaturan disimpan", + invalidJson: "JSON tidak valid", + settingsJson: "JSON Pengaturan", + dangerZone: "Zona berbahaya", + clearDocuments: "Hapus semua dokumen", + clearDocumentsConfirmMessage: "Ini akan menghapus setiap dokumen dari indeks. Tindakan ini tidak dapat dibatalkan.", + documentsCleared: "Semua dokumen dihapus", + deleteIndex: "Hapus indeks", + deleteIndexConfirmMessage: "Ini akan menghapus indeks beserta semua dokumennya secara permanen.", + indexDeleted: "Indeks dihapus", + isIndexing: "Mengindeks", + uid: "UID", + updatedAt: "Diperbarui", + primaryKey: "Kunci utama", + documentCountLabel: "Dokumen", + databaseSize: "Ukuran database", + documentSize: "Ukuran dokumen", + avgDocumentSize: "Rata-rata ukuran dokumen", + instanceDatabaseSize: "Ukuran database instance", + copyDocument: "Salin JSON", + copied: "Disalin", + autoRefresh: "Segarkan otomatis", + hybrid: "Pencarian hibrida", + hybridEmbedder: "Embedder", + hybridSemanticRatio: "Rasio semantik", + hybridNoEmbedders: "Tidak ada embedder yang dikonfigurasi di pengaturan indeks; masukkan secara manual.", + showRankingScore: "Skor peringkat", + rankingScoreThreshold: "Ambang skor", + results: "Hasil", + exportResults: "Ekspor hasil", + exportFiltered: "Ekspor hasil yang difilter", + exportAll: "Ekspor semua dokumen", + exportLimitReached: "Hanya {count} dari {total} hasil yang tersedia; batas Meilisearch mencegah ekspor penuh.", + importResults: "Impor JSON", + importSuccess: "{count} dokumen diimpor", + importFailed: "Impor gagal: {message}", + importInvalidJson: "JSON harus berisi objek atau array objek", + exportSearchUnsupported: "Ekspor penuh tidak tersedia untuk pencarian teks, hibrida, atau ambang skor karena Meilisearch membatasi paginasi pencarian. Hapus opsi tersebut untuk mengekspor semua dokumen yang difilter.", + }, dynamodb: { tableMetadataUnavailable: "Metadata tabel DynamoDB belum dimuat. Segarkan dan coba lagi.", keyRequired: "Item DynamoDB memerlukan atribut kunci {key}", diff --git a/apps/desktop/src/i18n/locales/meilisearchManagement.ts b/apps/desktop/src/i18n/locales/meilisearchManagement.ts index 7469fb8bdd..7da3132059 100644 --- a/apps/desktop/src/i18n/locales/meilisearchManagement.ts +++ b/apps/desktop/src/i18n/locales/meilisearchManagement.ts @@ -527,6 +527,113 @@ export const meilisearchManagementMessages = { createIndexPrimaryKeyPlaceholder: "Необязательный первичный ключ", createIndexPrimaryKeyHelp: "Оставьте пустым, чтобы задать первичный ключ при добавлении первого документа.", }, + id: { + ...en, + systemManagement: "Manajemen sistem", + overview: "Ringkasan", + overviewDescription: "Status kesehatan, kapasitas, indeks, kunci, dan aktivitas tugas secara langsung.", + apiKeys: "Kunci API", + keysDescription: "Buat dan kelola kunci API Meilisearch dengan cakupan tertentu.", + tasks: "Tugas", + tasksDescription: "Periksa operasi asinkron, batalkan tugas aktif, dan bersihkan riwayat yang selesai.", + health: "Kesehatan", + version: "Versi", + indexCount: "Indeks", + totalDocuments: "Total dokumen", + indexingCount: "Mengindeks", + keyCount: "Kunci", + storage: "Penyimpanan", + usedDatabaseSize: "Ukuran database terpakai", + lastUpdate: "Pembaruan terakhir", + taskStatusDistribution: "Distribusi status tugas", + topIndexes: "Indeks teratas berdasarkan dokumen", + status: "Status", + idle: "Diam", + sectionStatus: { available: "Tersedia", forbidden: "Izin ditolak", unsupported: "Tidak didukung server ini", error: "Tidak tersedia" }, + refresh: "Segarkan", + rowActions: "Tindakan", + previous: "Sebelumnya", + next: "Berikutnya", + name: "Nama", + key: "Kunci", + description: "Deskripsi", + actions: "Tindakan", + indexes: "Indeks", + expiresAt: "Berakhir pada", + never: "Tidak pernah", + createKey: "Buat kunci", + editKey: "Edit kunci", + deleteKey: "Hapus kunci", + keyDetails: "Detail kunci", + keyCreated: "Kunci API dibuat", + keyUpdated: "Kunci API diperbarui", + keyDeleted: "Kunci API dihapus", + noKeys: "Tidak ada kunci API ditemukan", + deleteKeyConfirm: "Hapus kunci API {uid}? Tindakan ini tidak dapat dibatalkan.", + deleteKeyTypePrompt: "Masukkan UID kunci lengkap untuk mengonfirmasi penghapusan.", + deleteKeyTypePlaceholder: "Masukkan UID kunci", + immutableKeyFields: "Tindakan, indeks, kedaluwarsa, UID, dan secret bersifat tetap. Buat ulang kunci untuk mengubahnya.", + secretShownOnce: "Salin secret ini sekarang. DBX tidak pernah menyimpan nilai kunci API.", + actionsIndexesRequired: "Diperlukan minimal satu tindakan dan satu indeks.", + uidPlaceholder: "Biarkan kosong untuk membuat UID acak", + uidHelp: "Opsional. Jika kosong, Meilisearch akan membuat UID acak.", + namePlaceholder: "Beri nama kunci Anda", + nameHelp: "Nama opsional untuk mengenali kunci ini.", + descriptionPlaceholder: "Tambahkan deskripsi opsional", + descriptionHelp: "Catatan opsional yang menjelaskan di mana atau mengapa kunci ini digunakan.", + indexesPlaceholder: "Pilih indeks yang diizinkan", + indexesHelp: "Pilih satu atau beberapa indeks yang dapat diakses. * memberi akses ke semua indeks.", + actionsPlaceholder: "Pilih tindakan yang diizinkan", + actionsHelp: "Pilih operasi API yang diizinkan untuk kunci ini.", + expiresAtPlaceholder: "Pilih atau masukkan tanggal dan waktu", + expiresAtHelp: "Opsional. Biarkan kosong agar tidak pernah kedaluwarsa, atau masukkan tanggal dan waktu yang valid.", + openDateTimePicker: "Buka pemilih tanggal dan waktu", + invalidExpiresAt: "Masukkan tanggal dan waktu kedaluwarsa yang valid.", + copyKeyValue: "Salin kunci API", + paginationSummary: "{start}-{end} dari {total}", + readOnlyDisabled: "Koneksi ini bersifat baca saja; tindakan manajemen dinonaktifkan.", + resetFilters: "Atur ulang filter", + uidFilter: "Filter UID", + searchUid: "Cari UID", + allIndexes: "Semua indeks", + allStatuses: "Semua status", + indexListUnavailable: "Tidak dapat memuat daftar indeks yang dapat diakses", + columnSettings: "Atur kolom", + index: "Indeks", + type: "Tipe", + details: "Detail", + receivedDocuments: "Dokumen diterima", + indexedDocuments: "Dokumen diindeks", + enqueuedAt: "Dimasukkan antrean", + startedAt: "Dimulai", + finishedAt: "Selesai", + duration: "Durasi", + indexTasks: "Tugas · {index}", + noTasks: "Tidak ada tugas ditemukan", + taskCount: "{count} tugas cocok", + taskDetails: "Detail tugas", + cancelTask: "Batalkan tugas", + cancelTasks: "Batalkan tugas", + deleteTaskHistory: "Hapus riwayat tugas", + cancelFilteredTasks: "Batalkan tugas aktif yang difilter", + deleteFilteredHistory: "Hapus riwayat selesai yang difilter", + noAllowedTaskStatuses: "Filter yang diterapkan tidak berisi status tugas yang diizinkan untuk operasi ini.", + countingMatchingTasks: "Menghitung tugas yang cocok...", + cancelTasksConfirm: "Batalkan tugas aktif yang cocok dengan filter ini ({count} cocok saat ini)?", + deleteTasksConfirm: "Hapus riwayat tugas selesai yang cocok dengan filter ini ({count} cocok saat ini)?", + waitingForTask: "Menunggu tugas manajemen #{uid}", + taskOperationCompleted: "Operasi tugas selesai", + taskOperationFinished: "Operasi tugas selesai dengan status {status}", + taskPollingTimeout: "Tugas #{uid} masih tertunda setelah 60 detik. Segarkan secara manual untuk memeriksanya.", + createIndex: "Buat indeks", + createIndexUid: "UID indeks", + createIndexPrimaryKey: "Kunci utama", + indexCreated: "Indeks dibuat", + createIndexUidRequired: "UID indeks wajib diisi.", + createIndexUidPlaceholder: "Masukkan UID indeks", + createIndexPrimaryKeyPlaceholder: "Kunci utama opsional", + createIndexPrimaryKeyHelp: "Biarkan kosong untuk menetapkan kunci utama saat menambahkan dokumen pertama.", + }, } as const; export const meilisearchManagementAz = meilisearchManagementMessages.az; @@ -540,3 +647,4 @@ export const meilisearchManagementIt = meilisearchManagementMessages.it; export const meilisearchManagementPtBR = meilisearchManagementMessages["pt-BR"]; export const meilisearchManagementTr = meilisearchManagementMessages.tr; export const meilisearchManagementRu = meilisearchManagementMessages.ru; +export const meilisearchManagementId = meilisearchManagementMessages.id;