From 520671a9a93b6adfeb7f9f45d61937a5cde39d40 Mon Sep 17 00:00:00 2001 From: Iqbal F Date: Sun, 7 Jun 2026 07:39:59 +0700 Subject: [PATCH] feat(i18n): add Indonesian (id) locale support --- src/components/video-editor/SettingsPanel.tsx | 2 + src/contexts/I18nContext.tsx | 18 ++ src/i18n/config.ts | 2 +- src/i18n/locales/id/common.json | 26 ++ src/i18n/locales/id/dialogs.json | 62 +++++ src/i18n/locales/id/editor.json | 141 ++++++++++ src/i18n/locales/id/extensions.json | 60 +++++ src/i18n/locales/id/launch.json | 80 ++++++ src/i18n/locales/id/settings.json | 245 ++++++++++++++++++ src/i18n/locales/id/shortcuts.json | 16 ++ src/i18n/locales/id/timeline.json | 41 +++ 11 files changed, 692 insertions(+), 1 deletion(-) create mode 100644 src/i18n/locales/id/common.json create mode 100644 src/i18n/locales/id/dialogs.json create mode 100644 src/i18n/locales/id/editor.json create mode 100644 src/i18n/locales/id/extensions.json create mode 100644 src/i18n/locales/id/launch.json create mode 100644 src/i18n/locales/id/settings.json create mode 100644 src/i18n/locales/id/shortcuts.json create mode 100644 src/i18n/locales/id/timeline.json diff --git a/src/components/video-editor/SettingsPanel.tsx b/src/components/video-editor/SettingsPanel.tsx index 1fa526616..68a4fb5ce 100644 --- a/src/components/video-editor/SettingsPanel.tsx +++ b/src/components/video-editor/SettingsPanel.tsx @@ -869,12 +869,14 @@ const CAPTION_LANGUAGE_OPTIONS = [ { value: "zh", label: "Chinese (Simplified)" }, { value: "ja", label: "Japanese" }, { value: "ko", label: "Korean" }, + { value: "id", label: "Indonesian" }, ] as const; const APP_LANGUAGE_LABELS: Record = { en: "English", es: "Español", fr: "Français", + id: "Bahasa Indonesia", it: "Italiano", nl: "Nederlands", ko: "한국어", diff --git a/src/contexts/I18nContext.tsx b/src/contexts/I18nContext.tsx index 0a167800b..1ee765216 100644 --- a/src/contexts/I18nContext.tsx +++ b/src/contexts/I18nContext.tsx @@ -38,6 +38,14 @@ import frLaunch from "@/i18n/locales/fr/launch.json"; import frSettings from "@/i18n/locales/fr/settings.json"; import frShortcuts from "@/i18n/locales/fr/shortcuts.json"; import frTimeline from "@/i18n/locales/fr/timeline.json"; +import idCommon from "@/i18n/locales/id/common.json"; +import idDialogs from "@/i18n/locales/id/dialogs.json"; +import idEditor from "@/i18n/locales/id/editor.json"; +import idExtensions from "@/i18n/locales/id/extensions.json"; +import idLaunch from "@/i18n/locales/id/launch.json"; +import idSettings from "@/i18n/locales/id/settings.json"; +import idShortcuts from "@/i18n/locales/id/shortcuts.json"; +import idTimeline from "@/i18n/locales/id/timeline.json"; import itCommon from "@/i18n/locales/it/common.json"; import itDialogs from "@/i18n/locales/it/dialogs.json"; import itEditor from "@/i18n/locales/it/editor.json"; @@ -122,6 +130,16 @@ const messages: Record = { shortcuts: frShortcuts, extensions: frExtensions, }, + id: { + common: idCommon, + launch: idLaunch, + editor: idEditor, + timeline: idTimeline, + settings: idSettings, + dialogs: idDialogs, + shortcuts: idShortcuts, + extensions: idExtensions, + }, it: { common: itCommon, launch: itLaunch, diff --git a/src/i18n/config.ts b/src/i18n/config.ts index 2ecee76f8..7c5fe1e5e 100644 --- a/src/i18n/config.ts +++ b/src/i18n/config.ts @@ -1,6 +1,6 @@ export const DEFAULT_LOCALE = "en" as const; -export const SUPPORTED_LOCALES = ["en", "es", "fr", "it", "nl", "ko", "pt-BR", "zh-CN", "zh-TW"] as const; +export const SUPPORTED_LOCALES = ["en", "es", "fr", "id", "it", "nl", "ko", "pt-BR", "zh-CN", "zh-TW"] as const; export const I18N_NAMESPACES = [ "common", diff --git a/src/i18n/locales/id/common.json b/src/i18n/locales/id/common.json new file mode 100644 index 000000000..011ee4001 --- /dev/null +++ b/src/i18n/locales/id/common.json @@ -0,0 +1,26 @@ +{ + "app": { + "name": "Recordly", + "editorTitle": "Editor Recordly", + "subtitle": "Perekaman dan pengeditan layar", + "language": "Bahasa", + "manageRecordings": "Buka folder rekaman" + }, + "actions": { + "cancel": "Batal", + "close": "Tutup", + "export": "Ekspor", + "load": "Muat", + "redo": "Ulangi", + "reset": "Atur Ulang", + "save": "Simpan", + "undo": "Urungkan", + "delete": "Hapus", + "done": "Selesai" + }, + "errors": { + "invalidFileType": "Jenis file tidak valid", + "failedToUploadImage": "Gagal mengunggah gambar", + "fileReadError": "Terjadi kesalahan saat membaca file." + } +} diff --git a/src/i18n/locales/id/dialogs.json b/src/i18n/locales/id/dialogs.json new file mode 100644 index 000000000..cb0595610 --- /dev/null +++ b/src/i18n/locales/id/dialogs.json @@ -0,0 +1,62 @@ +{ + "export": { + "pleaseTryAgain": "Silakan coba lagi", + "compilingGifProgress": "Mengompilasi GIF... {{progress}}%", + "compilingGifWait": "Mengompilasi GIF... Ini mungkin membutuhkan waktu", + "takeMoment": "Ini mungkin memakan waktu sebentar...", + "exportFailed": "Ekspor Gagal", + "compilingGifTitle": "Mengompilasi GIF", + "exportingFormat": "Mengekspor {{format}}", + "exportComplete": "Ekspor Selesai", + "formatReady": "{{format}} Anda sudah siap", + "showInFolder": "Tampilkan dalam Folder", + "compiling": "Mengompilasi", + "renderingFrames": "Merender Bingkai", + "processing": "Memproses...", + "status": "Status", + "format": "Format", + "compilingStatus": "Mengompilasi...", + "frames": "Bingkai", + "cancelExport": "Batalkan Ekspor", + "reopenSaveDialog": "Buka Kembali Dialog Simpan", + "savedSuccess": "{{format}} berhasil disimpan!" + }, + "addFont": { + "title": "Tambah Font Google", + "heading": "Tambah Font Google", + "description": "Tambahkan font kustom dari Google Fonts untuk digunakan dalam anotasi Anda.", + "urlLabel": "URL Impor Google Fonts", + "urlPlaceholder": "https://fonts.googleapis.com/css2?family=Roboto&display=swap", + "urlHelp": "Dapatkan ini dari Google Fonts: Pilih font → Klik \"Get font\" → Salin URL @import", + "nameLabel": "Nama Tampilan", + "namePlaceholder": "Font Kustom Saya", + "nameHelp": "Ini adalah bagaimana font akan muncul dalam pemilih font", + "adding": "Menambahkan...", + "addFont": "Tambah Font", + "enterUrl": "Silakan masukkan URL impor Google Fonts", + "invalidUrl": "Silakan masukkan URL Google Fonts yang valid", + "enterName": "Silakan masukkan nama font", + "extractFailed": "Tidak dapat mengekstrak jenis font dari URL", + "addSuccess": "Font \"{{name}}\" berhasil ditambahkan", + "addFailed": "Gagal menambahkan font", + "loadTimeout": "Font memakan waktu terlalu lama untuk dimuat. Silakan periksa URL dan coba lagi.", + "loadFailed": "Font tidak dapat dimuat. Silakan pastikan URL Google Fonts sudah benar." + }, + "shortcutsConfig": { + "title": "Pintasan Keyboard", + "configurable": "Dapat Dikonfigurasi", + "fixed": "Tetap", + "pressEscToCancel": "Tekan Esc untuk membatalkan", + "clickToChange": "Klik untuk mengubah", + "pressAKey": "Tekan sebuah tombol…", + "alreadyUsedBy": "Sudah digunakan oleh {{action}}", + "swap": "Tukar", + "reserved": "Pintasan ini dicadangkan untuk \"{{label}}\" dan tidak dapat ditetapkan ulang.", + "saved": "Pintasan keyboard disimpan", + "resetNotice": "Atur ulang ke pintasan default — klik Simpan untuk menerapkan", + "instructions": "Klik pintasan lalu tekan kombinasi tombol baru. Tekan Esc untuk membatalkan.", + "resetToDefaults": "Atur ulang ke default", + "cancel": "Batal", + "save": "Simpan" + } +} diff --git a/src/i18n/locales/id/editor.json b/src/i18n/locales/id/editor.json new file mode 100644 index 000000000..913db2688 --- /dev/null +++ b/src/i18n/locales/id/editor.json @@ -0,0 +1,141 @@ +{ + "playback": { + "play": "Putar", + "pause": "Jeda", + "skipBack": "Lompat ke Belakang", + "skipForward": "Lompat ke Depan", + "muteUnmute": "Bisukan/Bunyikan" + }, + "annotations": { + "settings": "Pengaturan Anotasi", + "active": "Aktif", + "text": "Teks", + "image": "Gambar", + "arrow": "Panah", + "blur": "Buram", + "textContent": "Konten Teks", + "textPlaceholder": "Masukkan teks Anda...", + "fontStyle": "Gaya Font", + "selectStyle": "Pilih gaya", + "size": "Ukuran", + "toggleBold": "Alihkan tebal", + "toggleItalic": "Alihkan miring", + "toggleUnderline": "Alihkan garis bawah", + "alignLeft": "Rata kiri", + "alignCenter": "Rata tengah", + "alignRight": "Rata kanan", + "textColor": "Warna Teks", + "background": "Latar Belakang", + "none": "Tidak ada", + "clearBackground": "Hapus Latar Belakang", + "uploadImage": "Unggah Gambar", + "supportedFormats": "Format yang didukung: JPG, PNG, GIF, WebP", + "arrowDirection": "Arah Panah", + "strokeWidth": "Lebar Garis: {{width}}px", + "arrowColor": "Warna Panah", + "deleteAnnotation": "Hapus Anotasi", + "shortcutsAndTips": "Pintasan & Tips", + "tipSelectAnnotation": "Pindahkan playhead ke bagian anotasi yang tumpang tindih dan pilih item.", + "tipCycleForward": "Gunakan Tab untuk menelusuri item yang tumpang tindih.", + "tipCycleBackward": "Gunakan Shift+Tab untuk menelusuri mundur.", + "imageUploadSuccess": "Gambar berhasil diunggah!", + "imageUploadError": "Harap unggah file gambar JPG, PNG, GIF, atau WebP.", + "blurStrength": "Kekuatan Buram: {{strength}}", + "solidColor": "Warna Solid (Penyensoran)", + "borderRadius": "Radius Batas" + }, + "fontStyles": { + "classic": "Klasik", + "editor": "Editor", + "strong": "Kuat", + "typewriter": "Mesik Tik", + "deco": "Deko", + "simple": "Sederhana", + "modern": "Modern", + "clean": "Bersih" + }, + "format": { + "mp4Video": "Video MP4", + "mp4Description": "File video kualitas tinggi", + "gifAnimation": "Animasi GIF", + "gifDescription": "Gambar animasi untuk dibagikan" + }, + "gifOptions": { + "frameRate": "Kecepatan Bingkai", + "outputSize": "Ukuran Keluaran", + "outputDimensions": "Keluaran: {{width}} × {{height}}px", + "loopAnimation": "Putar Ulang Animasi", + "loopDescription": "GIF akan diputar terus-menerus" + }, + "tutorial": { + "howTrimmingWorks": "Bagaimana pemangkasan bekerja", + "title": "Bagaimana Pemangkasan Bekerja", + "understanding": "Memahami cara memotong bagian yang tidak diinginkan dari video Anda.", + "descriptionP1": "Alat Pangkas bekerja dengan menentukan segmen yang ingin Anda", + "descriptionRemove": "hapus", + "descriptionP2": "dari video Anda.", + "descriptionP3": "Setiap bagian dari timeline yang ditutupi oleh segmen potong merah akan dihilangkan saat Anda mengekspor.", + "visualExample": "Contoh Visual", + "removed": "DIHAPUS", + "kept": "Disimpan", + "finalVideo": "Video Akhir", + "part": "Bagian {{number}}", + "addTrimStep": "1. Tambah Pangkas", + "addTrimDesc": "Tekan T atau klik ikon gunting untuk menandai bagian yang akan dihapus.", + "adjustStep": "2. Sesuaikan", + "adjustDesc": "Tarik tepi wilayah merah untuk menutupi bagian yang tepat yang ingin Anda potong." + }, + "feedback": { + "trigger": "Umpan Balik", + "title": "Umpan Balik & Kontak", + "description": "Hubungi langsung atau buka masalah jika ada yang rusak atau hilang.", + "emailLabel": "Email", + "xLabel": "X", + "reportIssue": "Laporkan masalah / kirim umpan balik", + "openFailed": "Gagal membuka tautan." + }, + "keyboardShortcuts": { + "trigger": "Pintasan", + "title": "Pintasan Keyboard", + "description": "Referensi cepat untuk kontrol timeline dan editor.", + "customizeTooltip": "Sesuaikan pintasan", + "customize": "Sesuaikan", + "panTimeline": "Geser Timeline", + "zoomTimeline": "Perbesar Timeline", + "cycleAnnotations": "Siklus Anotasi", + "tab": "Tab" + }, + "actions": { + "saveAgain": "Simpan Lagi", + "showInFolder": "Tampilkan Dalam Folder" + }, + "project": { + "untitled": "Tanpa Judul" + }, + "nativeCaptureUnavailable": { + "title": "Tidak ada yang rusak, tetapi kami tidak dapat merender overlay kursor animasi.", + "description": "Perangkat Anda tidak mendukung perekaman asli. Ini mungkin karena berbagai alasan yang belum kami ketahui. Ini tidak merusak Recordly, tetapi membuat penghalusan kursor menjadi tidak mungkin.", + "confirm": "Oke" + }, + "exportStatus": { + "exporting": "Mengekspor", + "renderingFile": "Merender file Anda.", + "preparing": "Menyiapkan ekspor...", + "completePercent": "{{percent}}% selesai", + "issue": "Masalah ekspor", + "complete": "Ekspor selesai", + "savedSuccessfully": "File Anda berhasil disimpan." + }, + "export": { + "processingAudioEdits": "Memproses audio dengan pengeditan kecepatan/overlay" + }, + "toolbar": { + "addLayer": "Tambah Lapisan", + "splitClip": "Pisahkan Klip (C)" + }, + "timeline": { + "expand": "Perluas Timeline", + "collapse": "Ciutkan Timeline" + }, + "openRecordingsFolder": "Buka folder rekaman" +} diff --git a/src/i18n/locales/id/extensions.json b/src/i18n/locales/id/extensions.json new file mode 100644 index 000000000..eeabea68f --- /dev/null +++ b/src/i18n/locales/id/extensions.json @@ -0,0 +1,60 @@ +{ + "title": "Ekstensi", + "tabs": { + "browse": "Jelajahi", + "installed": "Terinstal" + }, + "actions": { + "submit": "Kirimkan ekstensi", + "docs": "Dokumentasi ekstensi", + "refresh": "Segarkan", + "openFolder": "Buka folder ekstensi", + "uninstall": "Copot pemasangan", + "install": "Instal", + "installing": "Menginstal", + "add": "Tambah", + "retry": "Coba lagi", + "close": "Tutup", + "folder": "Folder" + }, + "status": { + "enabled": "Diaktifkan", + "disabled": "Dinonaktifkan", + "installed": "Terinstal" + }, + "detail": { + "by": "Oleh {{author}}", + "unknownAuthor": "Penulis tidak diketahui", + "noDescription": "Tidak ada deskripsi", + "downloads": "{{count}} unduhan", + "preview": "Pratinjau", + "screenshotAlt": "Tangkapan layar {{number}}", + "description": "Deskripsi", + "tags": "Tag", + "permissions": "Izin", + "location": "Lokasi", + "error": "Kesalahan: {{message}}" + }, + "empty": { + "title": "Tidak Ada Ekstensi", + "description": "Instal ekstensi untuk menambahkan bingkai, efek kursor, dan alat editor." + }, + "search": { + "placeholder": "Cari ekstensi...", + "noResults": "Ekstensi tidak ditemukan", + "noMarketplace": "Belum ada ekstensi marketplace yang tersedia", + "count": "{{count}} ekstensi", + "countPlural": "{{count}} ekstensi" + }, + "toast": { + "installedAndEnabled": "Ekstensi terinstal dan diaktifkan", + "uninstalled": "Copot pemasangan {{name}} berhasil", + "uninstallFailed": "Gagal mencopot pemasangan {{name}}", + "searchFailed": "Gagal mencari marketplace", + "refreshed": "Ekstensi disegarkan", + "refreshFailed": "Gagal menyegarkan ekstensi", + "marketplaceInstalled": "Terinstal dan diaktifkan {{name}}", + "marketplaceInstallFailed": "Gagal menginstal {{name}}", + "enableFailed": "Gagal mengaktifkan ekstensi" + } +} \ No newline at end of file diff --git a/src/i18n/locales/id/launch.json b/src/i18n/locales/id/launch.json new file mode 100644 index 000000000..590c40544 --- /dev/null +++ b/src/i18n/locales/id/launch.json @@ -0,0 +1,80 @@ +{ + "recording": { + "disableSystemAudio": "Nonaktifkan audio sistem", + "enableSystemAudio": "Aktifkan audio sistem", + "disableMicrophone": "Nonaktifkan mikrofon", + "enableMicrophone": "Aktifkan mikrofon", + "micToggleDisabledTip": "Mikrofon tidak dapat dialihkan selama perekaman", + "disableWebcam": "Nonaktifkan overlay webcam", + "enableWebcam": "Aktifkan overlay webcam", + "countdownDelay": "Penundaan hitung mundur", + "noDelay": "Tanpa penundaan", + "record": "Rekam", + "recordingFolder": "Jalur Rekaman: {{path}}", + "chooseRecordingsFolder": "Pilih jalur rekaman", + "folderPath": "Jalur: /{{name}}/", + "openVideoFile": "Buka file video", + "openProject": "Buka proyek", + "hideHudFromVideo": "Sembunyikan HUD dari rekaman", + "showHudInVideo": "Tampilkan HUD dalam rekaman", + "hideHud": "Sembunyikan HUD", + "closeApp": "Tutup Aplikasi", + "screens": "Layar", + "windows": "Jendela", + "screen": "Layar", + "window": "Jendela", + "noSourcesFound": "Tidak ada sumber yang ditemukan", + "microphone": "Mikrofon", + "turnOffMicrophone": "Matikan Mikrofon", + "selectMicToEnable": "Pilih mikrofon untuk diaktifkan", + "noMicrophonesFound": "Tidak ada mikrofon yang ditemukan", + "webcam": "Webcam", + "turnOffWebcam": "Matikan Webcam", + "hideFloatingWebcamPreview": "Sembunyikan Pratinjau Mengambang", + "showFloatingWebcamPreview": "Tampilkan Pratinjau Mengambang", + "selectWebcamToEnable": "Pilih webcam untuk diaktifkan", + "noWebcamsFound": "Tidak ada webcam yang ditemukan", + "recordingsFolder": "Jalur Rekaman", + "language": "Bahasa", + "paused": "DIJEDA", + "rec": "REKAM", + "resume": "Lanjutkan", + "pause": "Jeda", + "stop": "Berhenti", + "cancel": "Batal", + "more": "Lainnya", + "update": { + "update": "Perbarui", + "updated": "Diperbarui", + "idleTitle": "Periksa pembaruan.", + "checkingTitle": "Memeriksa pembaruan...", + "downloadingTitle": "Mengunduh pembaruan...", + "errorTitle": "Pemeriksaan pembaruan gagal. Klik untuk mencoba lagi.", + "upToDateTitle": "Recordly {{version}} sudah yang terbaru.", + "availableTitle": "Recordly {{version}} tersedia.", + "availableGenericTitle": "Pembaruan tersedia." + } + }, + "sourceSelector": { + "loadingSources": "Memuat sumber...", + "screens": "Layar", + "windows": "Jendela", + "noScreensAvailable": "Tidak ada layar yang tersedia", + "noWindowsAvailable": "Tidak ada jendela yang tersedia", + "windowsNote": "Hanya jendela yang terlihat (tidak diminimalkan) yang dapat direkam.", + "windowPlaceholder": "Jendela", + "cancel": "Batal", + "share": "Bagikan" + }, + "permissions": { + "screenRecordingNeeded": "Recordly memerlukan izin Perekaman Layar sebelum Anda mulai. Pengaturan Sistem telah dibuka. Setelah mengaktifkannya, keluar dan buka kembali Recordly.", + "screenRecordingMissing": "Izin Perekaman Layar masih tidak ada. Pengaturan Sistem telah dibuka kembali. Aktifkan, lalu keluar dan buka kembali Recordly sebelum merekam.", + "accessibilityNeeded": "Recordly juga memerlukan izin Aksesibilitas untuk pelacakan kursor. Pengaturan Sistem telah dibuka. Setelah mengaktifkannya, keluar dan buka kembali Recordly.", + "accessibilityMissing": "Izin Aksesibilitas masih tidak ada. Pengaturan Sistem telah dibuka kembali. Aktifkan, lalu keluar dan buka kembali Recordly sebelum merekam.", + "selectSource": "Silakan pilih sumber untuk direkam", + "systemAudioUnavailable": "Audio sistem tidak tersedia untuk sumber ini. Perekaman akan dilanjutkan tanpa audio sistem.", + "microphoneDenied": "Akses mikrofon ditolak. Perekaman akan dilanjutkan tanpa audio mikrofon.", + "failedToStart": "Gagal memulai perekaman: {{error}}", + "failedToStartGeneric": "Gagal memulai perekaman" + } +} diff --git a/src/i18n/locales/id/settings.json b/src/i18n/locales/id/settings.json new file mode 100644 index 000000000..3236f41cc --- /dev/null +++ b/src/i18n/locales/id/settings.json @@ -0,0 +1,245 @@ +{ + "zoom": { + "level": "Tingkat Zoom", + "selectRegion": "Pilih wilayah zoom untuk disesuaikan", + "deleteZoom": "Hapus Zoom", + "modeAuto": "Otomatis", + "modeManual": "Manual", + "modeManualDescription": "Atur titik fokus tetap untuk zoom ini", + "modeAutoDescription": "Kamera akan memusatkan kembali saat kursor mendekati tepi tampilan yang diperbesar" + }, + "trim": { + "deleteRegion": "Hapus Wilayah Pangkas" + }, + "speed": { + "playbackSpeed": "Kecepatan Pemutaran", + "selectRegion": "Pilih wilayah kecepatan untuk disesuaikan", + "deleteRegion": "Hapus Wilayah Kecepatan", + "label": "Kecepatan" + }, + "clip": { + "title": "Klip", + "mute": "Bisukan", + "mutedState": "Audio dibisukan", + "unmutedState": "Audio diputar", + "separateClipFromAudio": "Pisahkan klip dari audio", + "delete": "Hapus Klip" + }, + "effects": { + "title": "Efek Video", + "show": "Tampilkan", + "showCursor": "Tampilkan Kursor", + "loopCursor": "Putar ulang kursor", + "cursorStyle": "Gaya Kursor", + "cursorStyleOptions": { + "macos": "macOS", + "tahoe": "Tahoe", + "tahoe-inverted": "Tahoe Terbalik", + "dot": "Titik", + "figma": "Minimal", + "lavender": "Lavender", + "parched": "Parched", + "chooper": "Chooper", + "amongus": "Among Us", + "turtle": "Kura-kura" + }, + "backgroundBlur": "Buram Latar Belakang", + "zoomMotionBlur": "Buram Gerak Zoom", + "temporalZoomMotionBlur": "Buram Zoom Temporal", + "temporalZoomMotionBlurDescription": "Kendalikan jendela rana dan sampel bingkai yang digunakan oleh pemuatan buram zoom baru.", + "zoomMotionBlurSamples": "Sampel Buram", + "zoomMotionBlurShutter": "Rana", + "auto": "Otomatis", + "connectZooms": "Hubungkan Zoom", + "connectZoomsDescription": "Menghaluskan area zoom berturut-turut menjadi gerakan kamera yang berkesinambungan.", + "autoApplyFreshRecordingZooms": "Terapkan otomatis zoom rekaman baru", + "autoApplyFreshRecordingZoomsDescription": "Saran otomatis zoom ke tengah tepi saat Anda membuka rekaman baru.", + "zoomGeneralTitle": "Umum", + "zoomGeneralDescription": "Pengaturan gerak global untuk setiap transisi zoom.", + "zoomInTitle": "Perbesar", + "zoomInDescription": "Kendalikan bagaimana kamera memasuki wilayah zoom.", + "zoomOutTitle": "Perkecil", + "zoomOutDescription": "Kendalikan bagaimana kamera keluar dari wilayah zoom.", + "connectedZoomTitle": "Di Antara Zoom", + "connectedZoomDescription": "Sesuaikan pergerakan antara wilayah zoom berturut-turut saat penghubungan diaktifkan.", + "motionPresetsTitle": "Prasetel Gerak", + "motionPresetsZoomHint": "Prasetel gerak zoom tersedia di Pengaturan.", + "animationPresets": "Prasetel Animasi", + "cursorMotionPresets": "Prasetel Gerak Kursor", + "motionPresets": { + "focused": { + "label": "Fokus", + "description": "Gerakan lebih gesit untuk demo, panduan, dan rekaman sehari-hari." + }, + "smooth": { + "label": "Halus", + "description": "Gerakan lebih lembut untuk presentasi, video gaya keynote, dan rilis yang dipoles." + } + }, + "zoomInDuration": "Durasi Perbesar", + "zoomInOverlap": "Tumpang Tindih Perbesar", + "zoomOutDuration": "Durasi Perkecil", + "zoomInEasing": "Kurva Perbesar", + "zoomOutEasing": "Kurva Perkecil", + "connectedZoomGap": "Jarak Zoom Terhubung", + "connectedZoomDuration": "Durasi Zoom Terhubung", + "connectedZoomEasing": "Kurva Geser Terhubung", + "zoomEasingOptions": { + "recordly": "Recordly", + "glide": "Meluncur", + "smooth": "Halus", + "snappy": "Cepat", + "linear": "Linier" + }, + "cursorSize": "Ukuran Kursor", + "cursorSmoothing": "Penghalusan Kursor", + "cursorSpringStiffness": "Kekakuan Pegas Kursor", + "cursorSpringDamping": "Peredam Pegas Kursor", + "cursorSpringMass": "Massa Pegas Kursor", + "off": "Mati", + "cursorClickEffects": { + "title": "Efek Klik", + "advanced": "Lanjutan", + "advancedShow": "Tampilkan kontrol efek klik lanjutan", + "advancedHide": "Sembunyikan kontrol efek klik lanjutan", + "color": "Warna Efek", + "size": "Ukuran Efek", + "opacity": "Opasitas Efek", + "duration": "Durasi Efek", + "none": { + "label": "Mati", + "description": "Tidak ada grafik klik. Hanya gerakan kursor yang berubah saat Anda mengklik." + }, + "ripple": { + "label": "Riak", + "description": "Cincin yang mengembang memancar dari setiap klik agar ketukan terlihat jelas." + }, + "spotlight": { + "label": "Lampu Sorot", + "description": "Halo lembut berkedip di sekitar penunjuk untuk menekankan area yang diklik." + }, + "echo": { + "label": "Gema", + "description": "Sepasang cincin lembut yang menyebar ke luar dengan denyut yang lebih bersih." + } + }, + "cursorMotionBlur": "Buram Gerak Kursor", + "cursorClickBounce": "Lompatan Klik Kursor", + "cursorClickBounceDuration": "Kecepatan Lompatan", + "cursorSway": "Goyangan Kursor", + "webcam": "Hamparan Webcam", + "webcamFootage": "Rekaman Webcam", + "webcamFootageDescription": "Tidak ada rekaman webcam yang terhubung ke video ini", + "uploadWebcamFootage": "Unggah rekaman", + "replaceWebcamFootage": "Ganti rekaman", + "removeWebcamFootage": "Hapus rekaman", + "webcamFootageAdded": "Rekaman webcam terhubung", + "webcamFootageRemoved": "Rekaman webcam dihapus", + "webcamSize": "Ukuran Webcam", + "webcamCrop": "Pangkas Webcam", + "webcamReactToZoom": "Webcam Bereaksi Terhadap Zoom", + "webcamMirror": "Cerminkan webcam", + "webcamRoundness": "Kebulatan Webcam", + "webcamShadow": "Bayangan Webcam", + "shadow": "Bayangan", + "radius": "Jari-jari", + "roundness": "Kebulatan", + "padding": "Bantalan", + "paddingLinked": "Terhubung (Seragam)", + "paddingUnlinked": "Tidak Terhubung (Asimetris)", + "paddingTop": "Atas", + "paddingBottom": "Bawah", + "paddingLeft": "Kiri", + "paddingRight": "Kanan", + "removeBackground": "Hapus latar belakang" + }, + "sections": { + "scene": "Adegan", + "captions": "Teks Video", + "zoom": "Zoom", + "cursor": "Kursor", + "webcam": "Webcam", + "frame": "Bingkai", + "crop": "Pangkas" + }, + "captions": { + "enabled": "Tampilkan", + "language": "Bahasa", + "downloading": "Mengunduh...", + "deleteModel": "Hapus Model", + "clearModel": "Bersihkan Model", + "downloadModel": "Unduh Model", + "generating": "Menghasilkan...", + "generateFull": "Hasilkan Teks Video", + "regenerateFull": "Regenerasi Teks Video", + "clearFull": "Bersihkan Teks Video", + "fontSettings": "Pengaturan Font", + "defaultFont": "Bawaan", + "fontFamily": "Font", + "fontSize": "Ukuran Font", + "rowCount": "Baris", + "animation": "Animasi", + "animationOff": "Mati", + "animationFade": "Pudar", + "animationRise": "Naik", + "animationPop": "Muncul", + "bottomOffset": "Jarak Bawah", + "maxWidth": "Lebar Maksimum", + "boxRadius": "Jari-jari Kotak", + "backgroundOpacity": "Opasitas Latar Belakang", + "textColor": "Warna Teks" + }, + "crop": { + "title": "Pangkas Video", + "instruction": "Tarik di setiap sisi untuk menyesuaikan area pangkas", + "top": "Atas", + "bottom": "Bawah", + "left": "Kiri", + "right": "Kanan", + "openEditor": "Buka Editor Pangkas" + }, + "background": { + "title": "Latar Belakang", + "image": "Gambar", + "color": "Warna", + "gradient": "Gradien", + "wallpaperPreview": "Pratinjau Wallpaper", + "uploadCustom": "Unggah Kustom", + "uploadSuccess": "Gambar kustom berhasil diunggah!", + "uploadError": "Harap unggah file gambar JPG atau JPEG.", + "uploadErrorDescription": "Hanya gambar JPG dan JPEG yang didukung." + }, + "export": { + "title": "Ekspor", + "mp4": "MP4", + "gif": "GIF", + "quality": { + "low": "Rendah", + "medium": "Sedang", + "high": "Tinggi", + "original": "Asli" + }, + "fpsTitle": "FPS", + "loop": "Putar Ulang", + "outputDimensions": "Keluaran: {{dimensions}}px", + "sizePresetOriginalShort": "Asli", + "sizePresetMediumShort": "Sdg", + "sizePresetLargeShort": "Bsr", + "loadProject": "Muat Proyek", + "saveProject": "Simpan Proyek", + "exportVideo": "Ekspor {{format}}", + "reportBug": "Laporkan Bug", + "starOnGithub": "Bintang di GitHub" + }, + "audio": { + "title": "Audio", + "volumeTitle": "Audio", + "volume": "Volume", + "normalize": "Normalkan", + "sourceTracksTitle": "Klip Audio Sumber", + "systemLabel": "Sistem Sumber", + "micLabel": "Mikrofon Sumber", + "mixedLabel": "Sumber", + "deleteRegion": "Hapus Audio" + } +} diff --git a/src/i18n/locales/id/shortcuts.json b/src/i18n/locales/id/shortcuts.json new file mode 100644 index 000000000..c2ff08cf4 --- /dev/null +++ b/src/i18n/locales/id/shortcuts.json @@ -0,0 +1,16 @@ +{ + "actions": { + "addZoom": "Tambah Zoom", + "addTrim": "Tambah Pangkas", + "addSpeed": "Tambah Kecepatan", + "addAnnotation": "Tambah Anotasi", + "addKeyframe": "Tambah Bingkai Utama", + "deleteSelected": "Hapus yang Dipilih", + "playPause": "Putar / Jeda", + "cycleForward": "Siklus Anotasi Maju", + "cycleBackward": "Siklus Anotasi Mundur", + "deleteSelectedAlt": "Hapus yang Dipilih (alt)", + "panTimeline": "Geser Timeline", + "zoomTimeline": "Perbesar Timeline" + } +} diff --git a/src/i18n/locales/id/timeline.json b/src/i18n/locales/id/timeline.json new file mode 100644 index 000000000..9b68f5859 --- /dev/null +++ b/src/i18n/locales/id/timeline.json @@ -0,0 +1,41 @@ +{ + "zoom": { + "cannotPlace": "Tidak dapat menempatkan zoom di sini", + "existsOrNoSpace": "Zoom sudah ada di lokasi ini atau ruang tidak cukup tersedia.", + "suggestHandlerUnavailable": "Penangan saran zoom tidak tersedia", + "noTelemetry": "Tidak ada telemetri kursor yang tersedia", + "recordFirst": "Rekam siaran layar terlebih dahulu untuk menghasilkan saran berbasis kursor.", + "noUsableTelemetry": "Tidak ada telemetri kursor yang dapat digunakan", + "notEnoughMovement": "Rekaman tidak menyertakan cukup data gerakan kursor.", + "noInteractionMoments": "Tidak ada momen interaksi jelas yang ditemukan", + "tryRecording": "Cobalah merekam dengan jeda atau klik di sekitar tindakan penting.", + "noAutoZoomSlots": "Tidak ada slot zoom otomatis yang tersedia", + "dwellPointsOverlap": "Titik diam yang terdeteksi tumpang tindih dengan wilayah zoom yang ada.", + "addedSuggestions": "Ditambahkan {{count}} saran zoom berbasis interaksi", + "label": "Zoom {{index}}", + "addZoom": "Tambah Zoom (Z)", + "suggestZooms": "Sarankan Zoom dari Kursor" + }, + "trim": { + "cannotPlace": "Tidak dapat menempatkan pangkasan di sini", + "existsOrNoSpace": "Pangkasan sudah ada di lokasi ini atau ruang tidak cukup.", + "label": "Pangkas {{index}}", + "addTrim": "Tambah Pangkasan (T)" + }, + "speed": { + "cannotPlace": "Tidak dapat menempatkan kecepatan di sini", + "existsOrNoSpace": "Wilayah kecepatan sudah ada di lokasi ini atau ruang tidak cukup.", + "label": "Kecepatan" + }, + "annotation": { + "label": "Anotasi", + "image": "Gambar", + "addAnnotation": "Tambah Anotasi (A)" + }, + "audio": { + "label": "Audio" + }, + "addSpeed": "Tambah Kecepatan (S)", + "resizeLeft": "Ubah ukuran kiri", + "resizeRight": "Ubah ukuran kanan" +}