
# Terjemahan

Blockstudio menyertakan terjemahannya di folder `languages`. WordPress menggunakannya saat bahasa situs atau bahasa di profil pengguna cocok dengan salah satunya. Cara kerjanya sama saat Blockstudio dijalankan sebagai plugin, plugin wajib pakai, atau paket Composer.

## Bahasa yang tersedia

Blockstudio menyertakan terjemahan untuk lokal WordPress yang tercatat dalam `languages/locales.json` bawaannya, termasuk varian regional serta formal/informal. Bahasa Inggris (`en_US`) adalah bahasa sumber dan tidak memerlukan file terjemahan. Daftar ini menggabungkan lokal yang didukung WordPress dari GlotPress dengan varian yang tersedia dari API terjemahan inti WordPress.

Terjemahan bahasa Jerman (`de_DE`) dan bahasa Jerman formal (`de_DE_formal`) yang sudah ada tetap dipertahankan. Terjemahan tambahan dibuat dengan AI menggunakan GPT-6 Luna dan ditandai sebagai hasil mesin di header `.po`. Terjemahan tersebut lolos pemeriksaan kelengkapan dan format otomatis, tetapi belum semuanya ditinjau oleh penutur asli. Silakan kirim koreksi.

Terjemahan mencakup kontrol field di editor blok, halaman admin, kanvas, overlay devtools, dan pesan endpoint REST. Label dan teks bantuan dalam file `block.json` Anda sendiri merupakan bagian dari tema atau plugin Anda dan menggunakan domain teksnya.

Pilih bahasa di **Pengaturan > Umum > Bahasa Situs**, atau pilih bahasa pribadi di profil WordPress Anda. Blockstudio menggunakan lokal tersebut secara otomatis. Fitur ini tidak menambahkan bahasa ke pemilih bahasa WordPress: lokal tersebut juga harus tersedia di instalasi WordPress Anda. Situs Anda tidak memerlukan permintaan AI, langganan terjemahan, atau pengaturan runtime tambahan.

## Ganti terjemahan

File terjemahan di `wp-content/languages/plugins` diutamakan daripada file bawaan, baik untuk string PHP (`blockstudio-de_DE.mo` atau `blockstudio-de_DE.l10n.php`) maupun skrip (satu file per handle skrip, misalnya `blockstudio-de_DE-blockstudio-blocks.json`).

## Berkontribusi pada terjemahan

Setiap bahasa adalah file `.po` yang dapat Anda edit dengan editor teks apa pun atau alat penerjemahan seperti Poedit. Koreksi dan bahasa baru dapat dikirim sebagai pull request.

1. Untuk menambahkan bahasa, salin `languages/blockstudio.pot` ke `languages/blockstudio-<locale>.po`, misalnya `blockstudio-fr_FR.po`, lalu atur header `Language` dan `Plural-Forms`. Untuk memperbaiki suatu bahasa, edit file `.po` yang sudah ada.
2. Terjemahkan string-nya. Pertahankan placeholder seperti `%1$s` dalam terjemahan.
3. Jalankan `npm run i18n`. Perintah ini menulis file `.mo`, `.l10n.php`, dan `.json` yang dimuat oleh WordPress.
4. Commit file `.po` bersama file yang dihasilkan, lalu buat pull request.

Jika Anda tidak dapat menjalankan `npm`, pull request yang hanya berisi file `.po` juga tidak masalah. File yang dihasilkan dapat ditambahkan sebelum penggabungan.

## Membuat terjemahan yang belum tersedia

Pemelihara dapat membuat entri yang belum tersedia dengan Codex CLI terautentikasi. Ini adalah perintah pengembangan opsional, bukan sesuatu yang dijalankan oleh WordPress:

```bash
npm run i18n:translate -- --dry-run
npm run i18n:translate
```

Model default-nya adalah `gpt-6-luna`. Untuk mengerjakan satu lokal, gunakan `npm run i18n:translate -- --locale fr_FR`. Perintah ini mengekstrak string sumber terbaru, mengisi terjemahan yang belum ada, lalu mengompilasi file `.mo`, `.l10n.php`, dan `.json` untuk setiap skrip. Hanya string antarmuka publik, konteksnya, dan bentuk yang sudah ada yang dikirim ke Codex, bukan konten situs atau data pengguna.

Terjemahan yang sudah terisi tidak pernah diganti. Batch yang selesai disimpan, sehingga menjalankan ulang setelah terhenti akan melanjutkan pekerjaan yang belum selesai. Placeholder seperti `%1$s`, markup HTML, pengenal teknis, dan bentuk jamak yang diwajibkan divalidasi sebelum disimpan. Entri fuzzy dan bentuk jamak sumber yang berubah dibiarkan untuk ditinjau penerjemah. Tidak ada model cadangan jika model yang diminta tidak tersedia.

`npm run i18n:locales` secara eksplisit memperbarui daftar lokal dan aturan bentuk jamak dari WordPress/GlotPress. `npm run i18n:coverage` memeriksa kelengkapan setiap lokal dalam daftar yang disertakan di repositori. Pemeriksaan cakupan maupun CI normal tidak menggunakan AI atau mengambil data lokal. Lihat README repositori untuk opsi batching, konkurensi, dan pemulihan.

## String yang dapat diterjemahkan dalam kode

- PHP: gunakan fungsi WordPress dengan domain teks `blockstudio`, misalnya `__( 'Invalid block.', 'blockstudio' )`.
- JavaScript: impor `__` dari `@/utils/__` dan berikan string literal, misalnya `__( 'Add row' )`. String yang dirangkai saat runtime tidak dapat diterjemahkan, jadi gunakan satu string literal untuk setiap varian.
- Bundel skrip baru yang berisi string yang dapat diterjemahkan memerlukan entri di `scripts/i18n.ts` dan pemanggilan `wp_set_script_translations()` dengan handle dan `Translations::script_path()` yang sama.

Setelah mengubah string, jalankan `npm run i18n`. Perintah ini memperbarui `languages/blockstudio.pot` dan setiap file `.po`. String baru akan tetap dalam bahasa Inggris sampai penerjemah atau `npm run i18n:translate` mengisinya. CI menjalankan `npm run i18n:check` dan `npm run i18n:coverage`, yang menolak file hasil kompilasi yang usang, masalah ekstraksi, atau cakupan lokal yang tidak lengkap. Pembuatan tetap menjadi tindakan eksplisit maintainer.
