TranslatePress ile Metin Okuma: Ne İşe Yarar?

13 dk okuma 16 dk dinleme
TranslatePress ile Metin Okuma: Ne İşe Yarar?

TranslatePress, bir sayfanın işlenmiş HTML'sini istek anında çevirir ve tüm çevirileri yerel veritabanı tablolarında saklar. Her makale için tek bir gönderi kimliği vardır; dil geçişleri yinelenen gönderiler üzerinden değil, trp_translate() aracılığıyla gerçekleşir. Bu tek fark, metin okumanın bir TranslatePress sitesinde nasıl çalışması gerektiğini baştan şekillendirir.

Bu yazı, çok dilli metin okuma serimizin beşinci ve son bölümüdür. Daha önce WPML, Polylang, Weglot ve GTranslate konularını ele aldık. TranslatePress teknik açıdan bunların arasında farklı bir yerde duruyor; ses kurulumu da bunu yansıtıyor.

TranslatePress, WPML, Polylang ve Weglot'tan nasıl ayrılır?

WPML ve Polylang her dil için ayrı bir gönderi oluşturur. Her çevirinin kendi gönderi kimliği, kendi post_content alanı ve kendi kalıcı bağlantısı vardır. Her dil bağımsız bir WordPress nesnesi olduğundan ses üretimi oldukça kolaydır.

Weglot tam tersi bir yaklaşım benimser. Çeviriler Weglot'un sunucularında barınır ve bir proxy ya da alt alan adı aracılığıyla sayfaya enjekte edilir. Çevrilmiş metin hiçbir zaman WordPress veritabanına ulaşmaz. Bu yüzden Weglot'ta JavaScript kancaları kullanmadan sunucu taraflı metin okuma uygulamak güçtür.

TranslatePress bu ikisi arasında yer alır. Her makale için tek bir gönderi bulunur; bu nedenle post_content yalnızca varsayılan dili içerir. Ancak tüm çeviriler WordPress veritabanınızda, wp_trp_ tablolarında yerel olarak tutulur. Bunları okuyabilir, sorgulayabilir ve bir metin okuma motoruna aktarabilirsiniz. Bu durum, diğer dört eklentiye kıyasla ses yaklaşımını kökten değiştirir.

Çeviriler nerede saklanır?

TranslatePress çevirileri, wp_trp_ önekiyle başlayan özel tablolarda tutar. Her dil çifti için wp_trp_dictionary_<kaynak>_<hedef> biçiminde kendi sözlük tablosu oluşturulur. Bunların yanı sıra kaynak dizeler için wp_trp_original_strings ve tema ile eklenti çevirileri için gettext tabloları da bulunur.

Depolama yönlüdür. Bir İngilizce sitenin Almanca çevirisi, İngilizce'den Almanca'ya sözlüğünde yer alır. Geri okumak için aynı yön kullanılmalıdır. Burada işinize yarayacak genel fonksiyon trp_translate()'tir; bir içerik dizesi ve dil kodu alır, çevrilmiş sürümü döndürür.

if ( function_exists( 'trp_translate' ) ) {
    $translated = trp_translate( $post->post_content, 'de_DE' );
    // $post->post_content yerine $translated'ı metin okuma motoruna gönderin.
}

Metin okuma entegrasyonları için bu fonksiyon gerçeğin kaynağıdır. post_content'i doğrudan okumak, ziyaretçinin hangi URL'de olduğundan bağımsız olarak her seferinde varsayılan dili verir. TTSWP'nin bunu kendi tarafında nasıl ele aldığını öğrenmek için TranslatePress entegrasyon belgelerine bakın.

trp_translate() fonksiyonunun tek bir post_content'i üç yerelleştirilmiş ses çıktısına dönüştürdüğünü gösteren diyagram
Tek gönderi kimliği, tek post_content; trp_translate() aracılığıyla çok sayıda dile ait ses çıktısı.

Yerel ayar kodu tuzağı

TranslatePress kısa kısaltmalar değil, tam yerel ayar kodları kullanır. Almanca de değil de_DE'dir. Fransızca fr_FR'dir. Brezilya Portekizcesi pt_BR'dir. Polylang tarzı iki harfli kısaltmalar varsayan her entegrasyon TranslatePress'te sessizce başarısız olur.

TranslatePress geliştirici belgeleri bu konuda açıktır. trp_translate()'e geçirilen dil kodu, Ayarlar, TranslatePress, Genel bölümündeki yerel ayardır ve URL'deki dil kısaltmasıyla her zaman aynı olmayabilir. de gibi kısa bir kısaltma hiçbir sözlükle eşleşmez; fonksiyon uyarı vermeden orijinal dizeye geri döner. Özel kod yazıyorsanız, trp_translate()'i çağırmadan önce dil kodlarınızı normalize edin ve ses dosyalarıyla sonradan eşleştirebilmek için aynı yerel ayar biçimini birlikte saklayın.

URL yapısı ve önbellek

TranslatePress varsayılan olarak her dil için bir alt dizin kullanır. İngilizce sayfanız site.com/blog/post adresindeyken Almanca sürümü site.com/de/blog/post adresinde yer alır. Varsayılan dil için de alt dizin kullanma seçeneği vardır; bu tüm dilleri simetrik hale getirir.

Bu durum önbellek için ideal bir senaryodur. Farklı URL'ler, dil başına farklı önbellek anahtarları demektir. WP Rocket, LiteSpeed ve CDN kenar önbellekleri /de/blog/post'u /blog/post'tan ayrı bir kaynak olarak ele alır. Böylece Almanca ses dosyası Almanca sayfayla, İngilizce ses dosyası da İngilizce sayfayla birlikte sunulur. Gerekirse dışlama kuralları için önbellek entegrasyon belgelerimize bakabilirsiniz.

Tek risk, ücretli Otomatik Kullanıcı Dil Algılama eklentisidir. Tarayıcı diline göre ziyaretçileri yönlendirir; bu da sayfa önbellekleriyle çakışarak yanlış yönlendirmenin yanlış kullanıcıya sunulmasına neden olabilir. Aynı sorunu Polylang yazısında da ele aldık. TranslatePress sitelerinde bu eklenti ücretli olduğundan daha az kullanılır; ancak kullanıyorsanız yönlendirme mantığını önbellekten çıkarın.

Oynatıcı arayüzü çeviri sorunu

Bu sorun yalnızca TranslatePress'e özgüdür. Eklenti, JavaScript tarafından eklenen dizeleri algılar ve çevirir; bu alışılmadık bir özelliktir. Çoğu çeviri aracı JS ile işlenen içeriği görmezden gelir. TranslatePress ise bunu render sonrasında DOM'da yakalar ve çeviri teklif eder.

Bunun bir yan etkisi vardır: ses oynatıcısındaki "Oynat", "Duraklat" ve "Bu makaleyi dinle" gibi etiketler TranslatePress düzenleyicisinde çevrilebilir dize olarak görünür. Bu dizeler incelenmeden makine çevirisiyle işlenirse oynatıcı düğmeleri garip ya da yanlış metinler gösterebilir. Daha da kötüsü, yanlış çevrilen erişilebilirlik etiketleri ekran okuyucuları karıştırabilir.

TranslatePress içinde iki farklı çözüm bulunur. Çeviri dışında tutmak istediğiniz herhangi bir öğeye data-no-translation niteliği ekleyebilirsiniz. Ya da Gelişmiş Ayarlar altındaki dışlama seçicilerini kullanarak tüm kapsayıcıları CSS seçicisiyle atlayabilirsiniz. Her iki yöntem de TranslatePress'in kendi ayarlarında belgelenmiştir. TTSWP oynatıcısı için oynatıcı sarmalayıcısını sınıfa göre dışlayın; oynatıcı etiketlerinin eklentinin kendi dil dosyalarından gelmesine izin verin.

Dışlanması gerekenler

  • Ses oynatıcısı kapsayıcı öğesi
  • Oynat, duraklat ve ilerleme denetimlerindeki ARIA etiketleri
  • Süre göstergeleri ve zaman sayaçları
  • TTSWP tarafından görüntülenen ses adı veya dil adı etiketleri

Oynatıcıyı dışladıktan sonra yeniden biçimlendirmek istiyorsanız seçiciler için özel CSS belgelerimize bakın.

İçerik düzenleme sonrası uyumsuzluk sorunu

TranslatePress her çeviriyi tam kaynak dizeyle ilişkilendirir. Orijinali düzenlediğinizde TranslatePress yeni bir kaynak dize oluşturur ve mevcut çeviriyi bu dizeden ayırır. Çeviri Belleği eski çeviriyi öneri olarak sunar; ancak bir kişi bunu onaylayana kadar hedef dil, kaynak dile geri döner.

Metin okuma açısından bu, herhangi bir düzenlemenin ardından sesin çevrilmiş metinle uyumsuz hale gelebileceği anlamına gelir. İngilizce'ye virgül eklemek bile o dizedeki her dilin çevirisini ayırır. Almanca ses hâlâ eski cümleyi okurken görünen Almanca metin artık yeni sürümü gösterir.

İçerik düzenlemesi sonrası pratik kontrol listesi:

  1. Her aktif dil için TranslatePress düzenleyicisinde yeni kaynak dizeyi onaylayın.
  2. Önce varsayılan dil gönderisinde sesi yeniden oluşturun.
  3. Her dil için sesi yeniden oluşturun, ardından yeni dosyanın görünen metinle eşleştiğini doğrulamak amacıyla her yerelleştirilmiş URL'de sesi oynatın.
  4. Yalnızca varsayılanı değil, tüm yerelleştirilmiş URL'ler için sayfa önbelleğini temizleyin.

TranslatePress sitesinde TTSWP kurulumu

Güncel akış aşağıdaki gibidir. Entegrasyon belgeleri her zaman en son davranışı açıklar.

  1. TTSWP'yi WordPress.org eklenti dizininden yükleyin. Kurulum kılavuzu adım adım yol gösterir.
  2. Eklentiyi TTSWP arka ucuna bağlayın. Ücretsiz planlar, ödeme yapmadan önce tam akışı test etmeniz için başlangıç kredileri içerir. Ayrıntılar için sitenizi bağlayın sayfasına bakın.
  3. TranslatePress'in etkin olduğunu ve tam yerel ayar koduyla yapılandırılmış en az bir hedef dilin bulunduğunu doğrulayın.
  4. Dil-ses eşlemesini kullanarak her dile bir ses atayın. de_DE için Almanca bir ses, fr_FR için Fransızca bir ses belirleyin. Ses kataloğu için ses seçimi sayfasına bakın.
  5. Bir gönderi yayımlayın veya güncelleyin. Ses önce varsayılan dil için oluşturulur.
  6. Her çevrilmiş URL'de sesi oynatın. Üretim talep üzerine gerçekleşir. Bir ziyaretçi ikincil bir dilde ilk kez ses oynatmaya çalıştığında TranslatePress, TTSWP'ye hangi dilin aktif olduğunu bildirir; TTSWP o dil için dosyayı oluşturup önbelleğe alır. Sonraki oynatmalar önbelleğe alınmış dosyayı kullanır.
  7. Oynatıcıyı TranslatePress'ten dışlayın: data-no-translation niteliğini ya da Gelişmiş Ayarlar'daki bir CSS seçicisini kullanın. Böylece oynatıcı etiketleri TTSWP'nin kendi çevirileri üzerinden gelir.

TTSWP, gönderi ve dil başına bir ses dosyası saklar; oynatıcı ziyaretçinin bulunduğu URL'nin diline göre dosyayı yükler. /de/blog/post adresinde Almanca dosya, varsayılan URL'de ise varsayılan dil dosyası yüklenir. Otomatik çeviri etkinken TTSWP, metni ElevenLabs'e göndermeden önce doğrudan TranslatePress'ten okur. Bu sayede ses, ziyaretçinin sayfada gördüğü metinle tam uyumlu olur.

Metin okuma için ücretsiz ve ücretli TranslatePress

Ücretsiz TranslatePress tek bir ek dili destekler, TranslatePress AI aracılığıyla 2.000 yapay zeka çevirisi sunar ve kendi API anahtarınızla Google Çeviri kullanmanıza olanak tanır. Bu, iki dilde ses eşleşmesi olan iki dilli bir blog yürütmek için yeterlidir.

Ücretli TranslatePress sınırsız ek dil, çevrilmiş kısaltmalar, meta ve hreflang kontrolü için SEO Paketi, DeepL desteği, çevirmen hesapları, Otomatik Kullanıcı Dil Algılama eklentisi ve dil başına farklı alan adı seçeneği ekler. İkiden fazla dil, arama motorları için hreflang etiketleri veya metin okuma üretiminden önce DeepL kalitesinde çeviriler gereken siteler için ücretli sürüm mantıklı bir tercih. Ses kalitesi her iki katmanda da aynıdır.

Dil başına sesle SEO ve AEO

SEO Paketi, ülkeye özgü yerel ayar, bölgeden bağımsız dil veya her ikisiyle birlikte dil başına hreflang etiketleri yapılandırmanıza olanak tanır. Arama motorları ve yapay zeka yanıt motorları için hangi sesin hangi bölgeyle eşleştiğini bu etiketler belirler.

Her dil URL'si için doğru inLanguage değeriyle hreflang'a uyan bir AudioObject şema girişi ekleyin. Google ve Bing dil eşleştirmesini algılar. Kendi testlerimizde Perplexity ve ChatGPT Search gibi yapay zeka motorları, şema temiz ve ses URL'si çözülebilir olduğunda ses zenginleştirilmiş makaleleri daha sık alıntıladı. Bu konuyu AEO ve ses yazısında daha ayrıntılı ele aldık.

Yaygın sorunlar ve çözümleri

SorunNedenÇözüm
Ses yanlış dilde çalıyorMetin trp_translate() yerine post_content'ten alınıyorTam yerel ayar koduyla metni trp_translate( $content, $locale ) üzerinden yönlendirin
Oynatıcı düğmeleri yanlış çevrilmişTranslatePress JS ile işlenen oynatıcı etiketlerini yakaladıOynatıcı sarmalayıcısına data-no-translation ekleyin ya da Gelişmiş Ayarlar'da CSS seçicisiyle dışlayın
İçerik düzenlemesi sonrası ses eksikKaynağı düzenlemek çevirileri ve dolayısıyla dil başına sesi ayırıyorTranslatePress düzenleyicisinde çevirileri onaylayın, ardından her dil için sesi yeniden oluşturun
Yerel ayar kodu uyuşmazlığıEntegrasyon de_DE yerine de gönderiyortrp_translate() çağrısından önce tam yerel ayara normalize edin
Arapça veya İbranice için RTL düzeni bozukOynatıcı CSS RTL uyumlu değilRTL yerel ayarları için oynatıcı denetimlerini yansıtmak üzere özel CSS kullanın
Yanlış dile önbelleğe alınmış yönlendirmeOtomatik Kullanıcı Dil Algılama eklentisi sayfa önbelleğiyle çakışıyorYönlendirmeyi önbellekten çıkarın ya da algılamayı kapatın

Erişilebilirlik notu

Oynatıcı klavyeyle kullanılabilir ve doğru etiketlenmişse ses anlatımı birçok WCAG başarı kriterini destekler. Oynatıcıyı TranslatePress'ten dışladığınızda ARIA etiketlerini TTSWP'nin kendi çevirilerinde bozulmadan bırakın. WCAG ses kılavuzumuz kriterleri ayrıntılı biçimde ele alır; ana kurulum öğreticisi de iyi bir başlangıç noktasıdır.

Sık sorulan sorular

TranslatePress metin okumayla çalışır mı?

Evet. TranslatePress çevirileri yerel olarak wp_trp_ veritabanı tablolarında tutar ve trp_translate() fonksiyonu çevrilmiş içeriği sunucu tarafında döndürür. Bir metin okuma entegrasyonu, sesi gönderi kimliği ve yerel ayara göre anahtarlayıp de_DE gibi tam yerel ayar kodları kullandığı sürece çevrilmiş metni okuyup dil başına ses üretebilir.

Ses için TranslatePress ücretli sürümüne ihtiyacım var mı?

Hayır. Ücretsiz TranslatePress tek bir ek dili destekler ve TranslatePress AI, kendi anahtarınızla Google Çeviri veya manuel düzenleme yoluyla çeviri sunar. İki dilde ses eşleşmesi olan iki dilli bir site için bu yeterlidir. Ücretli sürüm sınırsız dil, SEO Paketi, DeepL ve algılama eklentileri ekler; ikiden fazla dile veya hreflang kontrolüne ihtiyaç duyduğunuzda işe yarar.

Oynatıcı düğmelerim neden yanlış çevriliyor?

TranslatePress JS ile eklenen dizeleri algılar; bu yüzden ses oynatıcı etiketleri düzenleyicisinde görünür ve makine çevirisiyle işlenebilir. Bunu düzeltmek için oynatıcı sarmalayıcısına data-no-translation ekleyin ya da Gelişmiş Ayarlar'da bir CSS seçicisiyle oynatıcı kapsayıcısını dışlayın. Oynatıcı etiketleri bunun yerine TTSWP'nin kendi dil dosyalarından gelir.

Sesim neden çeviriyle uyumsuz hale geldi?

TranslatePress'te orijinal dizeyi düzenlemek yeni bir kaynak dize oluşturur ve mevcut çeviriyi ayırır. Çeviri Belleği eski çeviriyi öneri olarak sunar; ancak siz onaylayana kadar hedef dil kaynağa geri döner. Herhangi bir içerik düzenlemesinin ardından varsayılan gönderide ve her dil için sesi yeniden oluşturun, ardından her yerelleştirilmiş URL için önbelleği temizleyin.

Metin okuma açısından TranslatePress, Weglot'tan nasıl farklı?

Weglot çevirileri kendi sunucularında saklar ve sayfaya enjekte eder; WordPress çevrilmiş metni sunucu tarafında hiç görmez. TranslatePress ise her çeviriyi yerel veritabanınızda tutar ve sunucu tarafı erişimi için trp_translate()'i kullanıma sunar. Bu sayede TranslatePress'te dil başına ses üretimi, Weglot'a kıyasla çok daha doğrudan gerçekleşir.

Sıradaki adım

Metin Okuma - TTSWP'yi WordPress.org eklenti dizininden yükleyin, hesabınıza bağlayın ve TranslatePress'te kullandığınız her dil için bir ses atayın. Bir gönderi yayımlayın, her çevrilmiş URL'de sesi oynatın ve sesin görünen metinle eşleştiğini doğrulayın. Bir sorun çıkarsa ilk başvuracağınız yer TranslatePress entegrasyon belgeleri olsun.