Dokumentasi Anova Translate

17 menit baca

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

  1. Cara kerja singkat
  2. Instalasi & persyaratan
  3. Pengaturan
  4. Editor visual
  5. Halaman Terjemahan String, Slug URL, Impor & Ekspor
  6. Pengalih bahasa
  7. SEO
  8. WooCommerce
  9. Pemecahan masalah & FAQ
  10. Referensi pengembang
  11. Bahasa antarmuka plugin

1. Cara kerja singkat

  1. Pengunjung membuka https://situs.com/en/about-us/.
  2. Router mengenali awalan en, menetapkan bahasa aktif en_US, mengubah slug about-us kembali ke slug asli tentang-kami, lalu WordPress memuat halaman seperti biasa.
  3. Tema dan plugin menghasilkan HTML dalam bahasa asli.
  4. 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/.
  5. 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

KebutuhanMinimum
WordPress5.8
PHP7.4 (dengan mbstring)
DatabaseMySQL 5.6 / MariaDB 10.1
PermalinkSelain “Plain”

Langkah:

  1. Plugin → Tambah Baru → Unggah Plugin → pilih anova-translate.zip → Pasang → Aktifkan.
  2. Buka Pengaturan → Permalink dan pastikan tidak memakai “Plain”. Klik Simpan sekali.
  3. Buka Anova Translate → Pengaturan.

Saat aktif, plugin membuat:

  • Tabel {prefix}anova_tr_strings, {prefix}anova_tr_translations, {prefix}anova_tr_slugs
  • Opsi anova_tr_settings dan anova_tr_db_version
  • Kapabilitas anova_translate_strings untuk Administrator

3. Pengaturan

Menu: Anova Translate → Pengaturan. Ada tiga tab.

3.1 Tab Bahasa

Daftar bahasa

KolomKeterangan
☰ (seret)Urutan bahasa di pengalih bahasa
BahasaNama asli + nama Inggris
KodeKode locale WordPress (en_US). Menentukan file terjemahan tema/plugin yang dimuat
Slug URLAwalan di URL. Bawaan en, bisa diganti (misalnya english). Hanya huruf kecil, angka, dan tanda hubung
UtamaBahasa konten asli. Hanya satu
HapusMenonaktifkan 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_lang selama 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:

IsianContohKeterangan
NamaBahasa BiakNama untuk admin
Nama asliWos VyakDitampilkan di pengalih bahasa
Kode unikbhwPengenal internal, tidak bisa diubah
Slug URLbiakMenjadi situs.com/biak/
hreflangbhwKode ISO 639 untuk Google. Kosongkan = sama dengan slug
BenderaIDKode negara 2 huruf
Locale WordPressid_IDUntuk teks tema/plugin. Kosongkan = locale bahasa utama
RTL—Untuk bahasa yang ditulis dari kanan ke kiri

3.2 Tab Pengalih Bahasa

OpsiPilihan
Tombol melayangAktif/nonaktif
PosisiKanan bawah, kiri bawah, kanan atas, kiri atas
Gaya tombol melayangDropdown atau sebaris
Tampilan bahasaBendera + 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

OpsiBawaanKeterangan
Penerjemah—Peran selain Administrator yang boleh memakai editor visual dan halaman string
Daftarkan string otomatisAktifTeks baru dicatat saat halaman dibuka dalam bahasa terjemahan. Bila mati, string hanya tercatat lewat editor visual
Konten dinamisAktifMenerjemahkan teks yang muncul lewat AJAX/JS
hreflangAktifTag <link rel="alternate" hreflang> di <head>
Sitemap multibahasaAktif/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 dihapusMatiBila 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

TombolAksi
Ctrl/⌘ + SSimpan
Ctrl/⌘ + EnterSimpan lalu pindah ke string berikutnya
Alt + ↓ / Alt + ↑String berikutnya / sebelumnya

4.4 Jenis string

LabelContohCara menerjemahkan
TeksSelamat datangKetik terjemahan biasa
HTMLKami 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/
attralt, title, placeholder, aria-label, nilai tombolTeks biasa, tanpa HTML
metaJudul 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]

AtributNilaiBawaan
styledropdown, list, inlinedropdown
displayflag_name, name, name_code, flag_code, code, flagsesuai Pengaturan
hide_current0 / 10

Alias:

Bahasa Indonesia
.

Anova Canvas / Elementor: tambahkan widget Shortcode lalu tempel kode di atas. Gutenberg: blok Shortcode.

6.2 Menu navigasi

  1. Buka Tampilan → Menu.
  2. 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.
  3. 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>, meta description, og:title, og:description, og:site_name, og:image:alt, twitter:title, twitter:description, twitter:image:alt, serta atribut alt gambar.
  • Tautan canonical, next, prev, shortlink, dan og:url ikut dilokalkan.
  • Bahasa RTL mendapat dir="rtl".
  • Sitemap situs.com/anova-translate-sitemap.xml memuat semua pos/halaman publik dan arsip taksonomi dalam setiap bahasa, lengkap dengan xhtml:link alternatif. Sitemap otomatis tercantum di robots.txt. Kirim alamat ini ke Google Search Console.
  • Yoast SEO / Rank Math: keluaran meta keduanya ikut diterjemahkan. Bila salah satu aktif, og:locale dari 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.

BagianPerilaku
Halaman toko, produk, kategoriDiterjemahkan seperti halaman biasa. Slug produk & kategori bisa diterjemahkan
Keranjang mini (AJAX)Fragmen woocommerce_add_to_cart_fragments diterjemahkan
CheckoutRingkasan pesanan (update_order_review) dan pesan error/sukses diterjemahkan
URLKeranjang, checkout, dan halaman “pesanan diterima” tetap dalam bahasa pengunjung
PesananBahasa disimpan di meta _anova_tr_lang, dengan kolom Bahasa di daftar pesanan (mendukung HPOS)
Email pelangganIsi dan subjek email (pesanan diproses, selesai, ditahan, invoice, catatan, refund) dikirim dalam bahasa saat pelanggan memesan

Cara menerjemahkan email:

  1. Buat pesanan uji dari halaman berbahasa Inggris.
  2. Setelah email terkirim, teksnya tercatat di Terjemahan String. Cari kata kunci dari email.
  3. 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

KonstantaNilai
ANOVA_TR_VERSION1.0.0
ANOVA_TR_DIR / ANOVA_TR_URLPath & URL folder plugin
ANOVA_TR_CAPanova_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.

MetodeEndpointBody / parameterHasil
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&nbsp;datang dan Selamat datang dianggap string yang sama.

10.7 Opsi & data lain

NamaIsi
Opsi anova_tr_settingsSemua pengaturan (array)
Opsi anova_tr_db_versionVersi skema
Transient anova_tr_slugmapsCache peta slug (1 hari, otomatis dibersihkan saat slug berubah)
Cookie anova_tr_langBahasa terakhir pengunjung
Meta pesanan _anova_tr_langBahasa pesanan WooCommerce
Parameter ?anova-translate-editor=1&url=…Membuka editor
Parameter ?anova-translate-preview=1Mode 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

TempatMengikuti
Menu admin, halaman pengaturan, Terjemahan String, Slug URL, Impor & Ekspor, PanduanBahasa 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 depanBahasa halaman yang dibuka (/en/ → Inggris)
Deskripsi plugin di menu PluginBahasa 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

FileFungsi
languages/anova-translate.potTemplate berisi 211 teks sumber (bahasa Inggris)
languages/anova-translate-id_ID.poTerjemahan Bahasa Indonesia (bisa diedit)
languages/anova-translate-id_ID.moHasil kompilasi .po, dibaca WordPress
languages/anova-translate-id_ID.l10n.phpFormat 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):

  1. Pasang plugin Loco Translate.
  2. Buka Loco Translate → Plugin → Anova Translate → Bahasa baru.
  3. Pilih bahasa (misalnya Bahasa Melayu). Pilih lokasi System (wp-content/languages/plugins/) agar file tidak hilang saat plugin diperbarui.
  4. Terjemahkan, lalu klik Simpan. File .mo dibuat otomatis.

Cara Poedit:

  1. Buka languages/anova-translate.pot di Poedit → Create new translation → pilih bahasa.
  2. Terjemahkan, lalu simpan sebagai anova-translate-{locale}.po (misalnya anova-translate-ms_MY.po). Poedit sekaligus membuat .mo.
  3. Unggah .po dan .mo ke wp-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 init prioritas 0, sebelum widget dan menu didaftarkan. Ini sesuai aturan WordPress 6.7+ yang melarang pemuatan terjemahan sebelum init.
  • 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