Teks ke Ucapan untuk TranslatePress: Panduan Lengkap

10 mnt membaca 21 mnt mendengarkan
Teks ke Ucapan untuk TranslatePress: Panduan Lengkap

TranslatePress menerjemahkan HTML yang sudah dirender dari sebuah halaman saat dimuat, lalu menyimpan setiap terjemahan di tabel database lokal. Setiap artikel hanya punya satu ID postingan, dan pergantian bahasa terjadi melalui trp_translate(), bukan melalui postingan duplikat. Fakta inilah yang mengubah cara kerja teks ke ucapan di situs TranslatePress.

Ini adalah artikel kelima dan terakhir dalam seri TTS multibahasa kami. Sebelumnya kami sudah membahas WPML, Polylang, Weglot, dan GTranslate. TranslatePress berada di antara keempatnya secara teknis, dan konfigurasi audio mencerminkan hal itu.

Perbedaan TranslatePress dengan WPML, Polylang, dan Weglot

WPML dan Polylang membuat postingan terpisah untuk setiap bahasa. Setiap terjemahan punya ID postingan sendiri, post_content sendiri, dan permalink sendiri. Pembuatan audio lebih mudah karena setiap bahasa adalah objek WordPress yang berbeda.

Weglot mengambil pendekatan sebaliknya. Terjemahan disimpan di server Weglot dan dimasukkan ke halaman melalui proxy atau subdomain. Database WordPress sama sekali tidak melihat teks yang sudah diterjemahkan, itulah mengapa TTS sisi server di Weglot sulit dilakukan tanpa kait JavaScript.

TranslatePress berada di tengah. Setiap artikel hanya punya satu postingan, jadi post_content hanya berisi bahasa default. Tapi setiap terjemahan tersimpan secara lokal di database WordPress Anda, di tabel wp_trp_. Anda bisa membacanya, mencarinya, dan meneruskannya ke mesin TTS. Inilah yang membedakan pendekatan audio dibandingkan keempat plugin lainnya.

Di mana terjemahan disimpan

TranslatePress menyimpan terjemahan di tabel khusus dengan awalan wp_trp_. Setiap pasang bahasa mendapat tabel kamus sendiri, dengan format penamaan wp_trp_dictionary_<sumber>_<target>. Ada juga wp_trp_original_strings untuk string sumber dan tabel gettext untuk terjemahan tema dan plugin.

Penyimpanan bersifat satu arah. Terjemahan bahasa Jerman dari situs berbahasa Inggris tersimpan di kamus Inggris-ke-Jerman. Membacanya kembali membutuhkan arah yang sama. Fungsi publik yang perlu Anda ketahui adalah trp_translate(), yang menerima string konten dan kode bahasa lalu mengembalikan versi terjemahannya.

if ( function_exists( 'trp_translate' ) ) {
    $translated = trp_translate( $post->post_content, 'de_DE' );
    // Teruskan $translated ke mesin TTS, bukan $post->post_content.
}

Untuk integrasi TTS, fungsi itu adalah sumber data utama. Membaca post_content langsung akan selalu mengembalikan bahasa default, tidak peduli URL mana yang dikunjungi pengunjung. Lihat dokumentasi integrasi TranslatePress untuk cara TTSWP menangani ini dari sisi kami.

Diagram trp_translate() mengubah satu post_content menjadi tiga output audio dalam bahasa berbeda
Satu ID postingan, satu post_content, banyak output audio terjemahan melalui trp_translate().

Jebakan kode lokal

TranslatePress menggunakan kode lokal lengkap, bukan slug. Bahasa Jerman adalah de_DE, bukan de. Bahasa Prancis adalah fr_FR. Bahasa Portugis Brasil adalah pt_BR. Integrasi apa pun yang mengasumsikan slug dua huruf seperti di Polylang akan gagal tanpa pesan error di TranslatePress.

Dokumentasi pengembang TranslatePress sudah menegaskan ini. Kode bahasa yang diteruskan ke trp_translate() adalah lokal dari Pengaturan, TranslatePress, Umum, dan tidak selalu sama dengan slug bahasa di URL. Slug pendek seperti de tidak cocok dengan kamus mana pun, sehingga fungsi ini kembali ke string asli tanpa peringatan. Jika Anda menulis kode kustom, normalkan kode bahasa Anda sebelum memanggil trp_translate(), dan simpan format lokal yang sama di samping file audio agar bisa dicocokkan kembali nanti.

Struktur URL dan caching

TranslatePress menggunakan subdirektori per bahasa secara default. Halaman bahasa Inggris Anda ada di site.com/blog/post dan versi Jermannya di site.com/de/blog/post. Ada juga opsi menggunakan subdirektori untuk bahasa default agar semua bahasa simetris.

Ini adalah situasi ideal untuk caching. URL yang berbeda berarti kunci cache berbeda per bahasa. WP Rocket, LiteSpeed, dan cache edge CDN semuanya memperlakukan /de/blog/post sebagai resource terpisah dari /blog/post, sehingga file audio Jerman disajikan bersama halaman Jerman dan audio Inggris bersama halaman Inggris. Dokumentasi integrasi caching kami mencakup aturan pengecualian jika Anda membutuhkannya.

Satu risiko adalah add-on berbayar Automatic User Language Detection. Add-on ini mengalihkan pengunjung berdasarkan bahasa browser, yang bisa bertabrakan dengan cache halaman dan menyajikan pengalihan yang salah kepada pengguna yang salah. Kami sudah membahas pola yang sama di artikel Polylang. Lebih sedikit situs TranslatePress yang menggunakan deteksi karena ini adalah add-on berbayar, tapi jika Anda menggunakannya, kecualikan logika pengalihan dari cache.

Masalah terjemahan antarmuka pemutar

Masalah ini unik untuk TranslatePress. Plugin ini mendeteksi dan menerjemahkan string yang dimasukkan oleh JavaScript, yang jarang dilakukan alat terjemahan lain. Sebagian besar alat terjemahan mengabaikan konten yang dirender oleh JS. TranslatePress menangkapnya di DOM setelah render dan menawarkan untuk menerjemahkannya.

Efek sampingnya adalah label pemutar audio seperti "Putar", "Jeda", dan "Dengarkan artikel ini" muncul di editor TranslatePress sebagai string yang bisa diterjemahkan. Jika string tersebut diterjemahkan mesin tanpa tinjauan, pemutar bisa berakhir dengan teks tombol yang canggung atau salah, dan yang lebih parah, label aksesibilitas yang salah terjemahan dan membingungkan pembaca layar.

Ada dua cara memperbaikinya di dalam TranslatePress. Tambahkan atribut data-no-translation ke elemen mana pun yang ingin Anda kecualikan. Atau gunakan selektor pengecualian di bawah Pengaturan Lanjutan untuk melewati seluruh kontainer berdasarkan selektor CSS. Keduanya terdokumentasi di pengaturan TranslatePress sendiri. Khusus untuk pemutar TTSWP, kecualikan wrapper pemutar berdasarkan class, lalu biarkan label pemutar terjemahan kami masuk melalui file bahasa plugin sendiri.

Yang perlu dikecualikan

  • Elemen kontainer pemutar audio
  • Label ARIA pada kontrol putar, jeda, dan progres
  • Tampilan waktu dan penghitung durasi
  • Label nama suara atau nama bahasa yang dirender oleh TTSWP

Jika ingin mengubah tampilan pemutar setelah mengecualikannya, dokumentasi CSS kustom kami mencakup selektor yang diperlukan.

Masalah ketidaksesuaian setelah mengedit konten

TranslatePress mengaitkan setiap terjemahan dengan string sumber yang persis sama. Edit yang asli, dan TranslatePress membuat string sumber baru lalu melepas terjemahan yang ada. Translation Memory menyarankan terjemahan lama kembali, tapi sampai seseorang mengonfirmasinya, bahasa target kembali ke sumber.

Untuk teks ke ucapan, ini berarti audio bisa tidak sinkron dengan teks terjemahan setelah pengeditan apa pun. Menambahkan koma dalam bahasa Inggris melepas terjemahan setiap bahasa untuk string itu. Audio Jerman Anda masih mengucapkan kalimat lama, tapi teks Jerman yang terlihat kini menampilkan yang baru.

Daftar periksa praktis setelah mengedit konten:

  1. Konfirmasi string sumber baru di editor TranslatePress untuk setiap bahasa aktif.
  2. Buat ulang audio pada postingan bahasa default terlebih dahulu.
  3. Buat ulang audio untuk setiap bahasa, lalu putar audio di setiap URL lokal untuk memastikan file baru cocok dengan teks yang terlihat.
  4. Bersihkan cache halaman untuk setiap URL lokal, bukan hanya yang default.

Menyiapkan TTSWP di situs TranslatePress

Berikut alur yang berlaku saat ini. Dokumentasi integrasi selalu menjelaskan perilaku terbaru.

  1. Pasang TTSWP dari direktori plugin WordPress.org. Panduan pemasangan menjelaskan langkah-langkahnya.
  2. Hubungkan plugin ke backend TTSWP. Paket gratis menyertakan kredit awal agar Anda bisa menguji seluruh alur sebelum berlangganan. Lihat cara menghubungkan situs Anda.
  3. Pastikan TranslatePress aktif dan setidaknya satu bahasa target sudah dikonfigurasi dengan kode lokal lengkap.
  4. Tetapkan satu suara per bahasa menggunakan pemetaan bahasa ke suara. Tetapkan suara Jerman ke de_DE, suara Prancis ke fr_FR, dan seterusnya. Lihat pilihan suara untuk katalog suara.
  5. Terbitkan atau perbarui postingan. Audio dibuat untuk bahasa default terlebih dahulu.
  6. Putar audio di setiap URL terjemahan. Pembuatan terjadi berdasarkan permintaan. Pertama kali pengunjung memutar audio di bahasa sekunder, TranslatePress memberi tahu TTSWP bahasa mana yang aktif, dan TTSWP membuat serta menyimpan file untuk bahasa itu di cache. Setiap pemutaran berikutnya menggunakan file yang sudah di-cache.
  7. Kecualikan pemutar dari TranslatePress menggunakan data-no-translation atau selektor Pengaturan Lanjutan agar label pemutar tetap dikendalikan oleh terjemahan TTSWP sendiri.

TTSWP menyimpan satu file audio per postingan dan bahasa, dan pemutar mengikuti bahasa dari URL yang dikunjungi pengunjung. Di /de/blog/post pemutar memuat file Jerman, di URL default ia memuat file bahasa default. Dengan terjemahan otomatis aktif, TTSWP membaca teks yang sudah diterjemahkan langsung dari TranslatePress sebelum mengirimkannya ke ElevenLabs, sehingga audio cocok dengan apa yang dilihat pengunjung di halaman.

TranslatePress gratis vs berbayar untuk TTS

TranslatePress gratis mendukung satu bahasa tambahan, menyertakan 2.000 kata terjemahan AI melalui TranslatePress AI, dan memungkinkan Anda menggunakan Google Translate dengan kunci API sendiri. Itu sudah cukup untuk menjalankan blog dwibahasa dengan audio yang cocok di dua bahasa.

TranslatePress berbayar menambahkan bahasa ekstra tak terbatas, SEO Pack untuk slug terjemahan, meta, dan kontrol hreflang, dukungan DeepL, akun penerjemah, add-on Automatic User Language Detection, dan domain berbeda per bahasa. Untuk situs yang membutuhkan lebih dari dua bahasa, tag hreflang untuk mesin pencari, atau terjemahan berkualitas DeepL sebelum pembuatan TTS, versi berbayar adalah pilihan praktis. Kualitas audio sendiri tidak bergantung pada tingkat paket.

SEO dan AEO dengan audio per bahasa

SEO Pack memungkinkan Anda mengonfigurasi tag hreflang per bahasa, dengan opsi untuk lokal khusus negara, bahasa independen wilayah, atau keduanya. Untuk mesin pencari dan mesin jawaban AI, itulah yang memberi sinyal audio mana yang cocok dengan wilayah mana.

Tambahkan entri skema AudioObject per URL bahasa, dengan nilai inLanguage yang benar sesuai hreflang. Google dan Bing mendeteksi pasangan bahasa tersebut, dan dalam pengujian kami sendiri, mesin AI seperti Perplexity dan ChatGPT Search lebih sering mengutip artikel yang diperkaya audio ketika skemanya bersih dan URL audio dapat diakses. Kami menulis lebih lanjut tentang ini di artikel AEO dan audio.

Masalah umum dan solusinya

MasalahPenyebabSolusi
Audio diputar dalam bahasa yang salahTeks diambil dari post_content bukan dari trp_translate()Teruskan teks melalui trp_translate( $content, $locale ) dengan kode lokal lengkap
Tombol pemutar diterjemahkan dengan salahTranslatePress menangkap label pemutar yang dirender JSTambahkan data-no-translation ke wrapper pemutar atau kecualikan berdasarkan selektor di Pengaturan Lanjutan
Audio hilang setelah mengedit kontenMengedit sumber melepas terjemahan dan, dampaknya, audio per bahasaKonfirmasi terjemahan di editor TranslatePress, lalu buat ulang audio per bahasa
Kode lokal tidak cocokIntegrasi meneruskan de alih-alih de_DENormalkan ke lokal lengkap sebelum memanggil trp_translate()
Tata letak RTL rusak untuk Arab atau IbraniCSS pemutar tidak mendukung RTLGunakan CSS kustom untuk mencerminkan kontrol pemutar untuk lokal RTL
Cache mengalihkan ke bahasa yang salahAdd-on Automatic User Language Detection berinteraksi dengan cache halamanKecualikan pengalihan dari cache atau matikan deteksi

Catatan aksesibilitas

Narasi audio mendukung beberapa kriteria keberhasilan WCAG ketika pemutar dapat dioperasikan dengan keyboard dan diberi label dengan benar. Jika Anda mengecualikan pemutar dari TranslatePress, pertahankan label ARIA di terjemahan TTSWP sendiri. Panduan audio WCAG kami membahas kriteria secara detail, dan tutorial pengaturan utama adalah titik awal yang baik.

Pertanyaan yang sering diajukan

Apakah TranslatePress bisa digunakan dengan teks ke ucapan?

Bisa. TranslatePress menyimpan terjemahan secara lokal di tabel database wp_trp_, dan fungsi trp_translate() mengembalikan konten terjemahan di sisi server. Integrasi TTS bisa membaca teks yang sudah diterjemahkan dan membuat audio per bahasa, selama audio dikaitkan dengan ID postingan plus lokal dan menggunakan kode lokal lengkap seperti de_DE bukan slug.

Apakah saya perlu TranslatePress berbayar untuk audio?

Tidak. TranslatePress gratis mendukung satu bahasa tambahan dan menyertakan terjemahan melalui TranslatePress AI, Google Translate dengan kunci sendiri, atau pengeditan manual. Itu sudah cukup untuk situs dwibahasa dengan audio yang cocok. Versi berbayar menambahkan bahasa tak terbatas, SEO Pack, DeepL, dan add-on deteksi, yang berguna jika Anda membutuhkan lebih dari dua bahasa atau kontrol hreflang.

Mengapa tombol pemutar saya diterjemahkan dengan salah?

TranslatePress mendeteksi string yang dimasukkan JS, sehingga label pemutar audio muncul di editornya dan bisa diterjemahkan secara mesin. Perbaiki dengan menambahkan data-no-translation ke wrapper pemutar, atau dengan mengecualikan kontainer pemutar di Pengaturan Lanjutan menggunakan selektor CSS. Label pemutar lalu berasal dari file bahasa TTSWP sendiri.

Mengapa audio saya tidak lagi cocok dengan terjemahan?

Mengedit string asli di TranslatePress membuat string sumber baru dan melepas terjemahan yang ada. Translation Memory menyarankannya kembali, tapi sampai Anda mengonfirmasi, bahasa target kembali ke sumber. Buat ulang audio di postingan default dan setiap bahasa setelah pengeditan konten apa pun, lalu bersihkan cache untuk setiap URL lokal.

Apa perbedaan TranslatePress dengan Weglot untuk TTS?

Weglot menyimpan terjemahan di servernya sendiri dan memasukkannya ke halaman, sehingga WordPress tidak pernah melihat teks yang sudah diterjemahkan di sisi server. TranslatePress menyimpan setiap terjemahan di database lokal Anda dan mengekspos trp_translate() untuk akses sisi server. Itu membuat pembuatan audio per bahasa lebih langsung di TranslatePress dibandingkan di Weglot.

Langkah selanjutnya

Pasang Teks ke Ucapan - TTSWP dari direktori plugin WordPress.org, hubungkan ke akun Anda, dan tetapkan satu suara per bahasa yang sudah Anda jalankan di TranslatePress. Terbitkan sebuah postingan, putar audio di setiap URL terjemahan, dan pastikan audio cocok dengan teks yang terlihat. Jika ada yang tidak sinkron, dokumentasi integrasi TranslatePress adalah tempat pertama untuk diperiksa.