Versi 1.0.0 · Loteng Anova Technology
Dokumen ini menjelaskan cara memakai, mengatur, dan mengembangkan Anova Translate. Bagian 1–8 ditujukan untuk pemilik situs dan penerjemah. Bagian 9–10 ditujukan untuk pengembang.
Daftar isi
- Cara kerja singkat
- Instalasi & persyaratan
- Pengaturan
- Editor visual
- Halaman Terjemahan String, Slug URL, Impor & Ekspor
- Pengalih bahasa
- SEO
- WooCommerce
- Pemecahan masalah & FAQ
- Referensi pengembang
- Bahasa antarmuka plugin
1. Cara kerja singkat
- Pengunjung membuka
https://situs.com/en/about-us/. - Router mengenali awalan
en, menetapkan bahasa aktifen_US, mengubah slugabout-uskembali ke slug aslitentang-kami, lalu WordPress memuat halaman seperti biasa. - Tema dan plugin menghasilkan HTML dalam bahasa asli.
- Sebelum dikirim ke browser, mesin penerjemah membaca HTML akhir, mencari setiap teks di database, lalu menggantinya dengan terjemahan. Semua tautan internal juga diubah ke versi
/en/. - Teks yang belum punya terjemahan dicatat otomatis agar bisa diterjemahkan nanti, dan sementara tetap tampil dalam bahasa asli.
Karena plugin bekerja pada HTML akhir, apa pun yang tampil di halaman bisa diterjemahkan, dari page builder mana pun.
Bahasa utama (misalnya Bahasa Indonesia) selalu tampil apa adanya tanpa diproses. Situs dalam bahasa utama tidak menjadi lebih lambat.
2. Instalasi & persyaratan
| Kebutuhan | Minimum |
|---|---|
| WordPress | 5.8 |
| PHP | 7.4 (dengan mbstring) |
| Database | MySQL 5.6 / MariaDB 10.1 |
| Permalink | Selain “Plain” |
Langkah:
- Plugin → Tambah Baru → Unggah Plugin → pilih
anova-translate.zip→ Pasang → Aktifkan. - Buka Pengaturan → Permalink dan pastikan tidak memakai “Plain”. Klik Simpan sekali.
- Buka Anova Translate → Pengaturan.
Saat aktif, plugin membuat:
- Tabel
{prefix}anova_tr_strings,{prefix}anova_tr_translations,{prefix}anova_tr_slugs - Opsi
anova_tr_settingsdananova_tr_db_version - Kapabilitas
anova_translate_stringsuntuk Administrator
3. Pengaturan
Menu: Anova Translate → Pengaturan. Ada tiga tab.
3.1 Tab Bahasa
Daftar bahasa
| Kolom | Keterangan |
|---|---|
| ☰ (seret) | Urutan bahasa di pengalih bahasa |
| Bahasa | Nama asli + nama Inggris |
| Kode | Kode locale WordPress (en_US). Menentukan file terjemahan tema/plugin yang dimuat |
| Slug URL | Awalan di URL. Bawaan en, bisa diganti (misalnya english). Hanya huruf kecil, angka, dan tanda hubung |
| Utama | Bahasa konten asli. Hanya satu |
| Hapus | Menonaktifkan bahasa (terjemahannya tidak ikut terhapus) |
Tambahkan bahasa dengan memilihnya dari dropdown, klik Tambah bahasa, lalu Simpan pengaturan.
⚠️ Jangan mengganti bahasa utama setelah mulai menerjemahkan. Terjemahan disimpan sebagai pasangan “teks asli → terjemahan”. Jika bahasa utama diganti, teks asli dianggap berbeda.
Awalan URL bahasa utama. Bila dicentang, bahasa utama juga memakai awalan (situs.com/id/), dan alamat tanpa awalan dialihkan dengan kode 301. Biarkan mati untuk situs yang sudah lama tayang agar URL lama dan peringkat Google tidak berubah.
Deteksi bahasa browser. Pengunjung baru yang browsernya berbahasa Inggris otomatis diarahkan ke /en/. Aturannya:
- Hanya berlaku pada kunjungan pertama. Pilihan bahasa disimpan di cookie
anova_tr_langselama 1 tahun. - Hanya berlaku saat membuka URL tanpa awalan. Pengunjung yang sengaja membuka
/en/...tidak dialihkan. - Bot (Googlebot, crawler media sosial, WhatsApp, Telegram) tidak dialihkan.
- Pencocokan memakai header
Accept-Language: kode persis dulu (en-GB), lalu bahasa dasar (en).
Bahasa kustom / bahasa daerah. Di bawah daftar bahasa ada formulir untuk menambahkan bahasa yang belum tersedia:
| Isian | Contoh | Keterangan |
|---|---|---|
| Nama | Bahasa Biak | Nama untuk admin |
| Nama asli | Wos Vyak | Ditampilkan di pengalih bahasa |
| Kode unik | bhw | Pengenal internal, tidak bisa diubah |
| Slug URL | biak | Menjadi situs.com/biak/ |
| hreflang | bhw | Kode ISO 639 untuk Google. Kosongkan = sama dengan slug |
| Bendera | ID | Kode negara 2 huruf |
| Locale WordPress | id_ID | Untuk teks tema/plugin. Kosongkan = locale bahasa utama |
| RTL | — | Untuk bahasa yang ditulis dari kanan ke kiri |
3.2 Tab Pengalih Bahasa
| Opsi | Pilihan |
|---|---|
| Tombol melayang | Aktif/nonaktif |
| Posisi | Kanan bawah, kiri bawah, kanan atas, kiri atas |
| Gaya tombol melayang | Dropdown atau sebaris |
| Tampilan bahasa | Bendera + nama, Nama, Nama + kode, Bendera + kode, Kode, Bendera saja |
Bendera memakai emoji. Di sebagian komputer Windows bendera tampil sebagai dua huruf kode negara (misalnya “US”).
3.3 Tab Lanjutan
| Opsi | Bawaan | Keterangan |
|---|---|---|
| Penerjemah | — | Peran selain Administrator yang boleh memakai editor visual dan halaman string |
| Daftarkan string otomatis | Aktif | Teks baru dicatat saat halaman dibuka dalam bahasa terjemahan. Bila mati, string hanya tercatat lewat editor visual |
| Konten dinamis | Aktif | Menerjemahkan teks yang muncul lewat AJAX/JS |
| hreflang | Aktif | Tag <link rel="alternate" hreflang> di <head> |
| Sitemap multibahasa | Aktif | /anova-translate-sitemap.xml |
| Kecualikan path | — | Satu path per baris, * = apa saja. Contoh: my-account/*, kontak |
| Jangan terjemahkan elemen | — | .kelas, #id, dipisah koma |
| Saat plugin dihapus | Mati | Bila dicentang, semua tabel dan opsi dihapus saat plugin di-uninstall |
4. Editor visual
4.1 Membuka editor
- Admin bar → Terjemahkan Halaman (di halaman mana pun)
- Anova Translate → Editor Visual ↗
- Daftar Pos/Halaman, lalu tautan Terjemahkan di bawah judul
- Halaman Terjemahan String, lalu klik URL di bawah string
4.2 Tata letak
┌──────────────── Panel ────────────────┬─────────── Pratinjau ───────────┐
│ Anova Translate [Keluar] │ situs.com/en/about-us/ 🖥 ▭ ▯ │
│ Pratinjau: [🇺🇸 English ▾] [Edit|Nav] │ │
│ 🇺🇸 English 12/40 🇲🇾 Melayu 3/40 │ (halaman situs Anda, │
│ [Cari string…] ☐ Belum diterjemahkan │ teks yang bisa diterjemahkan │
│ ● Selamat datang │ disorot saat disentuh) │
│ ● Kami membantu bisnis lokal… │ │
│ ○ Hubungi kami │ │
│ ───────────────────────────────────── │ │
│ Teks ‹ › │ │
│ 🇮🇩 Bahasa Indonesia │ │
│ [Selamat datang] │ │
│ 🇺🇸 English [Welcome ] │ │
│ 🇲🇾 Melayu [Selamat datang ] │ │
│ [Simpan Ctrl+S] │ │
│ ▸ Slug URL halaman ini │ │
└───────────────────────────────────────┴─────────────────────────────────┘
- Titik status: ○ abu-abu = belum diterjemahkan, ● kuning = sebagian bahasa, ● hijau = semua bahasa.
- Pratinjau dalam bahasa: pilih bahasa untuk melihat hasilnya. Semua bahasa tetap bisa diisi sekaligus di panel.
- Mode Edit: klik teks untuk memilihnya. Tautan dan form tidak berjalan.
- Mode Navigasi: klik tautan untuk berpindah halaman tanpa keluar dari editor.
- Ukuran layar: desktop, tablet (768px), ponsel (390px).
4.3 Pintasan keyboard
| Tombol | Aksi |
|---|---|
Ctrl/⌘ + S | Simpan |
Ctrl/⌘ + Enter | Simpan lalu pindah ke string berikutnya |
Alt + ↓ / Alt + ↑ | String berikutnya / sebelumnya |
4.4 Jenis string
| Label | Contoh | Cara menerjemahkan |
|---|---|---|
| Teks | Selamat datang | Ketik terjemahan biasa |
| HTML | Kami membantu <strong>bisnis lokal</strong> lewat <a href="/layanan/">layanan</a>. | Pertahankan tag-nya, cukup terjemahkan teksnya: We help <strong>local businesses</strong> through <a href="/layanan/">services</a>. Tautan internal otomatis diubah ke /en/ |
| attr | alt, title, placeholder, aria-label, nilai tombol | Teks biasa, tanpa HTML |
| meta | Judul tab, meta description, Open Graph, <option> | Tidak terlihat di halaman, jadi pilih dari daftar |
Bila satu klik mengenai beberapa string (misalnya teks tautan dan atribut title-nya), deretan tombol pilihan muncul di atas kolom terjemahan.
4.5 Slug URL dari editor
Untuk halaman, pos, produk, atau arsip kategori, bagian Slug URL halaman ini muncul di bawah panel. Isi slug per bahasa (misalnya about-us), lalu klik Simpan slug. Kosongkan untuk memakai slug asli.
4.6 Hak akses
Editor hanya bisa dibuka oleh pengguna dengan kapabilitas anova_translate_strings, yaitu Administrator ditambah peran yang dipilih di tab Lanjutan. Pratinjau editor tidak pernah di-cache.
5. Halaman admin lainnya
5.1 Terjemahan String
Daftar semua string yang tercatat di seluruh situs.
- Saring: bahasa tujuan, status (semua / belum / sudah), jenis (teks / HTML / atribut), kata kunci (mencari di teks asli, terjemahan, dan URL).
- Edit langsung: ketik di kolom kanan, lalu klik Simpan atau tekan
Ctrl+Enter(simpan dan lompat ke baris berikutnya). - Hapus: ikon tong sampah per baris, atau centang beberapa baris lalu Hapus terpilih.
- Kotak statistik di atas menampilkan persentase terjemahan tiap bahasa.
5.2 Slug URL
Pilih jenis konten (Halaman, Pos, Produk, Kategori, Tag, taksonomi kustom), lalu isi slug per bahasa.
- Slug dibersihkan otomatis menjadi huruf kecil dengan tanda hubung.
- Slug yang sudah dipakai objek lain di bahasa yang sama ditolak.
- Bila slug asli diubah di WordPress, peta slug ikut diperbarui otomatis.
5.3 Impor & Ekspor
Ekspor CSV menghasilkan file UTF-8 (dengan BOM, aman dibuka di Excel) berisi kolom:
original,type,en_US,ms_MY
"Selamat datang",text,"Welcome","Selamat datang"
"Kami membantu <strong>bisnis lokal</strong>.",html,"We help <strong>local businesses</strong>.",""
Centang Hanya string yang belum lengkap untuk mengirim pekerjaan ke penerjemah.
Impor CSV: formatnya sama. Kolom original wajib. Kolom bahasa yang tidak aktif diabaikan, sel kosong dilewati. String yang belum ada akan dibuat.
Alur kerja penerjemahan massal: Ekspor → terjemahkan di Google Sheets/Excel → Unduh sebagai CSV → Impor.
Pembersihan menghapus string yang belum punya terjemahan di bahasa mana pun, misalnya teks lama yang sudah dihapus dari situs. String yang masih ada di halaman akan tercatat lagi saat halaman dibuka.
6. Pengalih bahasa
6.1 Shortcode
[anova_translate]
| Atribut | Nilai | Bawaan |
|---|---|---|
style | dropdown, list, inline | dropdown |
display | flag_name, name, name_code, flag_code, code, flag | sesuai Pengaturan |
hide_current | 0 / 1 | 0 |
Alias: .Bahasa Indonesia
Anova Canvas / Elementor: tambahkan widget Shortcode lalu tempel kode di atas. Gutenberg: blok Shortcode.
6.2 Menu navigasi
- Buka Tampilan → Menu.
- Di kotak Anova Translate pilih salah satu:
- Pengalih Bahasa (dropdown): bahasa aktif sebagai item induk, bahasa lain sebagai sub-menu.
- Semua bahasa berjajar: setiap bahasa jadi item terpisah.
- Tambahkan ke Menu, lalu Simpan Menu.
Secara teknis item ini adalah tautan kustom berisi #anova-translate atau #anova-translate-flat, sehingga juga bisa ditambahkan manual.
6.3 Widget
Tampilan → Widget → “Anova Translate – Pengalih Bahasa”. Pilihannya: judul, gaya, dan tampilan.
6.4 PHP (tema)
<?php if ( function_exists( 'anova_translate_switcher' ) ) {
anova_translate_switcher( array( 'style' => 'inline', 'display' => 'code' ) );
} ?>
6.5 Mengubah tampilan dengan CSS
Pengalih memakai variabel CSS sehingga mudah disesuaikan dengan tema:
.anova-tr-switcher {
--atr-bg: #ffffff; /* latar */
--atr-ink: #14213d; /* teks */
--atr-line: #dde1ea; /* garis tepi */
--atr-hover: #f2f4f8; /* latar saat disentuh */
--atr-accent: #e85d2a; /* fokus keyboard */
}
.anova-tr-floating-wrap { bottom: 90px; } /* geser tombol melayang di atas tombol WhatsApp */
Kelas penting: .anova-tr-dropdown, .anova-tr-list, .anova-tr-inline, .anova-tr-item.is-current, .anova-tr-flag, .anova-tr-name, .anova-tr-code, .anova-tr-floating-wrap, .anova-tr-pos-bottom-right.
7. SEO
Setiap halaman berbahasa lain mendapat:
<html lang="en-US">
<title>About Us – Loteng</title>
<meta name="description" content="…terjemahan…">
<link rel="canonical" href="https://situs.com/en/about-us/">
<link rel="alternate" hreflang="id-ID" href="https://situs.com/tentang-kami/" />
<link rel="alternate" hreflang="en-US" href="https://situs.com/en/about-us/" />
<link rel="alternate" hreflang="x-default" href="https://situs.com/tentang-kami/" />
<meta property="og:locale" content="en_US" />
- Yang diterjemahkan:
<title>, metadescription,og:title,og:description,og:site_name,og:image:alt,twitter:title,twitter:description,twitter:image:alt, serta atributaltgambar. - Tautan
canonical,next,prev,shortlink, danog:urlikut dilokalkan. - Bahasa RTL mendapat
dir="rtl". - Sitemap
situs.com/anova-translate-sitemap.xmlmemuat semua pos/halaman publik dan arsip taksonomi dalam setiap bahasa, lengkap denganxhtml:linkalternatif. Sitemap otomatis tercantum dirobots.txt. Kirim alamat ini ke Google Search Console. - Yoast SEO / Rank Math: keluaran meta keduanya ikut diterjemahkan. Bila salah satu aktif,
og:localedari Anova Translate tidak ditambahkan agar tidak dobel. - Halaman pencarian dan 404 tidak diberi hreflang.
Rekomendasi: terjemahkan slug halaman-halaman penting. Google lebih menyukai URL dalam bahasa yang sama dengan isinya.
8. WooCommerce
Integrasi aktif otomatis bila WooCommerce terpasang.
| Bagian | Perilaku |
|---|---|
| Halaman toko, produk, kategori | Diterjemahkan seperti halaman biasa. Slug produk & kategori bisa diterjemahkan |
| Keranjang mini (AJAX) | Fragmen woocommerce_add_to_cart_fragments diterjemahkan |
| Checkout | Ringkasan pesanan (update_order_review) dan pesan error/sukses diterjemahkan |
| URL | Keranjang, checkout, dan halaman “pesanan diterima” tetap dalam bahasa pengunjung |
| Pesanan | Bahasa disimpan di meta _anova_tr_lang, dengan kolom Bahasa di daftar pesanan (mendukung HPOS) |
| Email pelanggan | Isi dan subjek email (pesanan diproses, selesai, ditahan, invoice, catatan, refund) dikirim dalam bahasa saat pelanggan memesan |
Cara menerjemahkan email:
- Buat pesanan uji dari halaman berbahasa Inggris.
- Setelah email terkirim, teksnya tercatat di Terjemahan String. Cari kata kunci dari email.
- Terjemahkan. Email berikutnya akan memakai terjemahan tersebut.
Email untuk admin toko selalu dikirim dalam bahasa utama.
9. Pemecahan masalah & FAQ
Halaman /en/ menampilkan 404. Permalink masih “Plain”. Ganti di Pengaturan → Permalink, lalu simpan. Periksa juga apakah slug bahasa bentrok dengan slug halaman yang sudah ada (misalnya ada halaman bernama en).
Terjemahan sudah disimpan tapi tidak muncul untuk pengunjung. Hampir selalu karena cache. Bersihkan cache plugin (LiteSpeed Cache, WP Rocket, W3 Total Cache), cache server, dan CDN (Cloudflare).
Teks tertentu tidak muncul di daftar string.
- Teks berada di dalam elemen yang dikecualikan (
notranslate,translate="no", atau selektor di pengaturan). - Teks berasal dari JavaScript. Aktifkan Konten dinamis, lalu buka halaman dalam bahasa terjemahan sebagai penerjemah yang sedang login agar teks tercatat.
- Teks hanya berisi angka atau simbol.
- Teks berada di
<code>,<textarea>,<svg>,<kbd>,<script>, atau<style>. Elemen ini sengaja dilewati.
Satu kalimat terpecah menjadi beberapa string. Ini terjadi bila kalimat dipotong oleh elemen blok (<div>, <p>, <br> di dalam <button>, dll.) atau tag yang tidak seimbang. Terjemahkan per potongan.
Nama merek ikut diterjemahkan. Bungkus nama merek dengan <span class="notranslate">Loteng</span>. Di Anova Canvas atau Elementor, isi CSS Classes widget dengan notranslate. Cara lain: biarkan terjemahannya sama dengan teks aslinya.
Mengubah satu kata di konten asli membuat terjemahan hilang. Terjemahan terikat pada teks asli yang persis sama. Bila teks asli berubah, string baru tercatat dan perlu diterjemahkan ulang. String lama bisa dibersihkan lewat Impor & Ekspor → Pembersihan.
Deteksi bahasa browser tidak berjalan. Pengalihan hanya terjadi pada kunjungan pertama, jadi hapus cookie anova_tr_lang untuk mengujinya. Plugin cache halaman harus mengecualikan cookie tersebut atau menonaktifkan cache untuk beranda.
Apakah situs jadi lambat? Bahasa utama tidak diproses sama sekali. Halaman terjemahan diproses dengan satu kueri database per ±400 string. Pengujian pada halaman berukuran 570 KB memakan waktu sekitar 100 ms. Plugin cache halaman tetap disarankan, dan setiap bahasa di-cache terpisah karena URL-nya berbeda.
Apakah ada terjemahan otomatis (Google/DeepL/AI)? Belum di versi 1.0. Gunakan alur Ekspor CSV → terjemahkan → Impor.
Bagaimana dengan multisite? Plugin bisa diaktifkan per situs. Setiap situs punya tabel dan pengaturan sendiri.
Data setelah plugin dinonaktifkan? Menonaktifkan plugin tidak menghapus data. Data hanya dihapus saat plugin di-uninstall dan opsi “Saat plugin dihapus” dicentang.
10. Referensi pengembang
10.1 Konstanta
| Konstanta | Nilai |
|---|---|
ANOVA_TR_VERSION | 1.0.0 |
ANOVA_TR_DIR / ANOVA_TR_URL | Path & URL folder plugin |
ANOVA_TR_CAP | anova_translate_strings |
10.2 Fungsi publik
anova_translate_current_language(): string
// Kode bahasa aktif, mis. "en_US".
anova_translate_url( string $lang, string $url = '' ): string
// URL dalam bahasa $lang. Tanpa $url = halaman saat ini.
anova_translate_switcher( array $args = [], bool $echo = true ): string
// $args: style (dropdown|list|inline), display, hide_current, class.
Kelas statis yang berguna:
Anova_TR_Settings::languages(); // ['id_ID','en_US', ...] bahasa aktif berurutan
Anova_TR_Settings::default_lang(); // 'id_ID'
Anova_TR_Settings::translation_langs(); // bahasa aktif selain bahasa utama
Anova_TR_Settings::info( 'en_US' ); // ['name','native','slug','flag','rtl','locale','hreflang', ...]
Anova_TR_Router::lang(); // bahasa aktif
Anova_TR_Router::is_default(); // true bila bahasa utama
Anova_TR_Url::localize( $url, 'en_US' ); // lokalkan URL
Anova_TR_Url::delocalize( $url ); // kembalikan ke URL asli
Anova_TR_Render::fragment( $html, 'en_US' ); // terjemahkan potongan HTML
Anova_TR_Render::text( 'Kirim', 'en_US' ); // terjemahkan satu teks
10.3 Filter & action
// Matikan penerjemahan di halaman tertentu
add_filter( 'anova_translate_should_process', function ( $ok ) {
return is_page( 'landing-khusus' ) ? false : $ok;
} );
// Kecualikan path dari awalan bahasa (path relatif tanpa "/" di depan)
add_filter( 'anova_translate_is_excluded_path', function ( $skip, $path ) {
return 0 === strpos( $path, 'api-saya/' ) ? true : $skip;
}, 10, 2 );
// Terjemahkan atribut tambahan, mis. data-tooltip
add_filter( 'anova_translate_attributes', function ( $attrs, $tag_name, $tag_html ) {
$attrs[] = 'data-tooltip';
return $attrs;
}, 10, 3 );
// Saring string sebelum disimpan (array hash => ['original'=>..., 'type'=>...])
add_filter( 'anova_translate_register_strings', function ( $items, $url ) {
return array_filter( $items, fn( $i ) => mb_strlen( $i['original'] ) < 2000 );
}, 10, 2 );
// Batas URL sitemap
add_filter( 'anova_translate_sitemap_limit', fn() => 10000 );
// Setelah terjemahan disimpan, mis. bersihkan cache
add_action( 'anova_translate_saved', function ( $string_id, $lang, $text ) {
if ( function_exists( 'rocket_clean_domain' ) ) { rocket_clean_domain(); }
}, 10, 3 );
10.4 Pengecualian di HTML
Elemen berikut beserta seluruh isinya tidak diterjemahkan:
<div class="notranslate">…</div>
<div class="anova-tr-no-translate">…</div>
<span translate="no">…</span>
<span data-no-translation>…</span>
<!-- dan selektor di Pengaturan → Lanjutan -->
Tag yang selalu dilewati: script, style, textarea, code, svg, math, noscript, template, kbd, samp, var, komentar HTML, serta #wpadminbar.
Agar tautan tidak dilokalkan, tambahkan data-at-nolink="1" pada <a>.
Path yang tidak pernah diberi awalan: wp-admin, wp-login.php, wp-content/, wp-includes/, wp-json, xmlrpc.php, wp-cron.php, sitemap, robots.txt, feed, dan file statis (.jpg, .pdf, .xml, …).
10.5 REST API
Namespace: /wp-json/anova-translate/v1. Endpoint selain lookup memerlukan kapabilitas anova_translate_strings dan header X-WP-Nonce.
| Metode | Endpoint | Body / parameter | Hasil |
|---|---|---|---|
POST | /lookup | { lang, strings: [..], url } (maks. 150) | { translations: { asli: terjemahan } }. Publik, dipakai skrip konten dinamis |
POST | /save | { id, translations: { en_US: "…" } } | { id, saved }. Isian kosong = hapus terjemahan |
GET | /string/{id} | — | Baris string + tr |
DELETE | /string/{id} | — | { deleted: true } |
POST | /slug | { type: post|term, object_id, slugs: { en_US: "about-us" } } | { saved, errors } |
Contoh:
fetch('/wp-json/anova-translate/v1/save', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-WP-Nonce': wpApiSettings.nonce },
body: JSON.stringify({ id: 42, translations: { en_US: 'Welcome' } })
});
10.6 Skema database
{prefix}anova_tr_strings
id BIGINT PK
hash CHAR(32) UNIQUE -- md5 teks asli yang dinormalisasi
original LONGTEXT
type VARCHAR(10) -- text | html | attr
url VARCHAR(255) -- tempat pertama ditemukan
created DATETIME
{prefix}anova_tr_translations
id BIGINT PK
string_id BIGINT -- → strings.id
lang VARCHAR(20)
translated LONGTEXT
updated DATETIME
updated_by BIGINT -- user ID
UNIQUE (string_id, lang)
{prefix}anova_tr_slugs
id BIGINT PK
object_type VARCHAR(20) -- post | term
object_id BIGINT
lang VARCHAR(20)
original_slug VARCHAR(200)
translated_slug VARCHAR(200)
UNIQUE (object_type, object_id, lang)
Normalisasi: entitas HTML di-decode (hanya untuk tipe text/attr), spasi beruntun dijadikan satu spasi, lalu di-trim. Dengan begitu Selamat datang dan Selamat datang dianggap string yang sama.
10.7 Opsi & data lain
| Nama | Isi |
|---|---|
Opsi anova_tr_settings | Semua pengaturan (array) |
Opsi anova_tr_db_version | Versi skema |
Transient anova_tr_slugmaps | Cache peta slug (1 hari, otomatis dibersihkan saat slug berubah) |
Cookie anova_tr_lang | Bahasa terakhir pengunjung |
Meta pesanan _anova_tr_lang | Bahasa pesanan WooCommerce |
Parameter ?anova-translate-editor=1&url=… | Membuka editor |
Parameter ?anova-translate-preview=1 | Mode pratinjau editor (khusus penerjemah) |
10.8 Alur permintaan
plugins_loaded (saat plugin dimuat)
└─ Anova_TR_Router::init() → baca /en/, ubah REQUEST_URI ke slug asli
init
└─ sitemap? → tampilkan XML & berhenti
template_redirect (prioritas 0) → Editor: tampilkan aplikasi editor
template_redirect (prioritas 1) → Router: pengalihan browser / awalan, cookie
template_redirect (PHP_INT_MAX) → Render: ob_start()
wp_head → hreflang, og:locale
… tema menghasilkan HTML …
akhir buffer → Engine::translate(): string → DB → ganti teks, lokalkan tautan
10.9 Kompatibilitas page builder
Penerjemahan dilewati saat page builder dalam mode edit (?elementor-preview, ?fl_builder, ?et_fb, ?anova-canvas-edit) agar editor builder tidak terganggu. Untuk builder lain, gunakan filter anova_translate_should_process.
11. Bahasa antarmuka plugin
Bagian ini membahas bahasa menu dan tombol plugin itu sendiri, bukan bahasa konten situs.
11.1 Aturan bahasa
| Tempat | Mengikuti |
|---|---|
| Menu admin, halaman pengaturan, Terjemahan String, Slug URL, Impor & Ekspor, Panduan | Bahasa profil pengguna yang login |
| Editor visual (panel samping) | Bahasa profil pengguna yang login |
| Admin bar “Terjemahkan Halaman” | Bahasa profil (di dasbor) / bahasa halaman (di depan) |
| Pengalih bahasa, widget, teks lain di tampilan depan | Bahasa halaman yang dibuka (/en/ → Inggris) |
| Deskripsi plugin di menu Plugin | Bahasa profil pengguna |
Bahasa profil diatur di Pengguna → Profil → Bahasa. Nilai bawaannya “Bawaan situs”, yaitu bahasa di Pengaturan → Umum → Bahasa Situs. Jadi admin yang situsnya berbahasa Indonesia otomatis melihat plugin dalam Bahasa Indonesia, sementara rekan yang memilih English di profilnya melihat plugin dalam bahasa Inggris pada situs yang sama.
Bila bahasa situs belum punya terjemahan plugin (misalnya Melayu), plugin tampil dalam bahasa Inggris.
11.2 File bahasa
| File | Fungsi |
|---|---|
languages/anova-translate.pot | Template berisi 211 teks sumber (bahasa Inggris) |
languages/anova-translate-id_ID.po | Terjemahan Bahasa Indonesia (bisa diedit) |
languages/anova-translate-id_ID.mo | Hasil kompilasi .po, dibaca WordPress |
languages/anova-translate-id_ID.l10n.php | Format PHP untuk WordPress 6.5+, lebih cepat dari .mo |
Urutan pemuatan: wp-content/languages/plugins/anova-translate-{locale}.mo (bila ada, misalnya hasil Loco Translate) didahulukan, lalu file di folder languages/ plugin.
11.3 Menambah bahasa antarmuka baru
Cara mudah — Loco Translate (tanpa koding):
- Pasang plugin Loco Translate.
- Buka Loco Translate → Plugin → Anova Translate → Bahasa baru.
- Pilih bahasa (misalnya Bahasa Melayu). Pilih lokasi System (
wp-content/languages/plugins/) agar file tidak hilang saat plugin diperbarui. - Terjemahkan, lalu klik Simpan. File
.modibuat otomatis.
Cara Poedit:
- Buka
languages/anova-translate.potdi Poedit → Create new translation → pilih bahasa. - Terjemahkan, lalu simpan sebagai
anova-translate-{locale}.po(misalnyaanova-translate-ms_MY.po). Poedit sekaligus membuat.mo. - Unggah
.podan.mokewp-content/languages/plugins/.
Memperbaiki terjemahan Indonesia bawaan: edit languages/anova-translate-id_ID.po, lalu kompilasi ulang (lihat 11.4). Cara lain: timpa lewat Loco Translate (lokasi System).
11.4 Untuk pengembang
Teks sumber di kode wajib bahasa Inggris dengan text domain anova-translate:
esc_html_e( 'Save settings', 'anova-translate' );
printf( esc_html__( 'View: %s', 'anova-translate' ), $name );
_n( '%s string', '%s strings', $count, 'anova-translate' );
Setelah menambah atau mengubah teks:
# dari folder plugin — tidak butuh gettext/WP-CLI
python3 tools/make-pot.py # perbarui .pot
python3 tools/make-pot.py --compile # kompilasi semua .po → .mo + .l10n.php
# alternatif resmi
wp i18n make-pot . languages/anova-translate.pot --exclude=tools
wp i18n make-mo languages/
wp i18n make-php languages/
Lalu tambahkan terjemahan teks baru ke anova-translate-id_ID.po (di Poedit: Translation → Update from POT file) dan kompilasi ulang.
Teks JavaScript (editor visual & admin) dikirim dari PHP lewat wp_localize_script / window.AnovaTREditor.i18n, sehingga ikut diterjemahkan oleh file .po yang sama. Tidak ada file JSON terpisah.
Catatan teknis:
- Text domain dimuat di
initprioritas 0, sebelum widget dan menu didaftarkan. Ini sesuai aturan WordPress 6.7+ yang melarang pemuatan terjemahan sebeluminit. - Editor visual memanggil
switch_to_locale( get_user_locale() )karena berjalan di tampilan depan, agar bahasanya sama dengan dasbor. - Plural Bahasa Indonesia:
nplurals=1; plural=0;.
© Loteng Anova Technology · GPLv2 atau lebih baru

