Polylang Siteler için Metin Okuma: Gerçekten İşe Yarayanlar

16 dk okuma 18 dk dinleme
Polylang Siteler için Metin Okuma: Gerçekten İşe Yarayanlar

Polylang'da gerçek metin okuma desteği şu anlama gelir: her çeviri gönderisi için doğru dil ve sesle ayrı bir ses dosyası. Polylang her çeviriyi kendi kimliğiyle ayrı bir WordPress gönderisi olarak sakladığından, gönderi bazında ses oluşturma doğal olarak çalışır. Asıl sorunlar ses seçimi, çerez yönlendirmeleri ve sayfa önbelleklemedir; sesin kendisi değil.

Bu yazı, çok dilli metin okuma serimizin dördüncüsü. Daha önce WPML, Weglot ve GTranslate 3.3.0 sürümünü inceledik. Polylang, mimari açıdan WPML'e en yakın eklentidir; ancak kendine özgü farklılıkları vardır. Aşağıda, Metin Okuma - TTSWP ile canlı sitelerde test ettiğimiz ve gerçekten işe yarayan her şeyi bulabilirsiniz.

Polylang neden metin okuma için önemli?

Polylang, ücretsiz eklentiler arasında en fazla çok dilli WordPress sitesine güç sağlar. 800.000'den fazla aktif kurulumu ve ücretsiz çok dilli eklentiler arasında en büyük kullanıcı tabanı vardır. İlk sürüm 2011'de çıktı ve eklenti hâlâ aktif olarak geliştiriliyor. Ekleyebileceğiniz dil sayısında herhangi bir sınır yok ve WordPress dil paketleri otomatik olarak indiriliyor. Polylang kullanan sitelerin büyük çoğunluğu bloglar, küçük yayıncılar ve çekirdeği ücretsiz olduğu ve mimarisi temiz olduğu için bu eklentiyi tercih eden ajanslar.

Bu yaygınlık, metin okuma eklentileri için tam anlamıyla bir tuzak. Pek çok eklenti Polylang desteği iddiasında bulunuyor; ancak yalnızca varsayılan dili test ediyorlar. Bir gönderiye tek ses dosyası ekliyor, ardından aynı dosyayı tüm çevirilerde kullanıyorlar. İspanyolca sürüm İngilizce ses çalıyor. Almanca sürüm sessiz kalıyor. Ziyaretçiler hemen ayrılıyor.

Çözüm yapısal bir meseledir. Polylang ekstra veritabanı tablosu veya kısa kod eklemez. WordPress taksonomileri üzerine kuruludur; kategoriler ve etiketlere de güç veren aynı temel özellik. Her çeviri gerçek bir gönderi olarak bulunur. Bu nedenle TTSWP'nin çalışma biçimi olan gönderi bazında ses oluşturma, Polylang'ın içerik saklama yapısıyla tam olarak örtüşür.

Polylang, Weglot ve GTranslate'den nasıl farklıdır?

Polylang gönderileri çoğaltır. Weglot ve GTranslate ise çeviriyi sayfa oluşturma sırasında yapar. Bu tek fark, metin okuma desteğine ilişkin her şeyi belirler.

Polylang kullanan bir sitede «Hakkımızda» sayfasının Almanca çevirisi, gönderi kimliği 412, dil kısa adı «de» ve veritabanında kendi içeriğine sahip ayrı bir WordPress gönderisidir. WordPress bunu görür, REST API bunu görür ve save_post ya da wp_insert_post kancasına bağlı her metin okuma eklentisi bunu görür. Ses oluşturma her çeviri için bir kez çalışır; o çevirinin dilinde çalışır ve dosya söz konusu gönderi kimliğine karşılık önbelleğe alınır.

Weglot ve GTranslate farklı çalışır. Çevrilmiş metin yalnızca bir kullanıcı sayfayı talep ettiğinde oluşur. Ses dosyası eklenecek ikinci bir gönderi yoktur. Weglot ve GTranslate için bu geçici çözümleri önceki yazılarda ele aldık. WPML, Polylang ile aynı çoğaltma modelini kullandığından WPML rehberimiz küçük ayarlamalarla burada da geçerlidir.

Metin okuma açısından bu iyi bir haberdir. Polylang size tam ihtiyacınız olanı sunar: dil başına kararlı bir gönderi kimliği, bilinen bir dil kısa adı ve sayfa oluşturma sırasında değişmeyen bir kalıcı bağlantı.

Polylang'ın gönderi çoğaltma yöntemi ile Weglot'un sayfa oluşturma sırasında çeviri yapmasını karşılaştıran diyagram
Polylang her dil için gerçek bir gönderi oluşturur; bu da gönderi bazında metin okuma üretimi için tam ihtiyaç duyulan şeydir.

Polylang'ın dört URL yapısı ve her birinin metin okuma için anlamı

Polylang dört URL modu sunar. Her biri, önbelleklerin, CDN'lerin ve dil algılama kodunun sayfalarınızı nasıl gördüğünü değiştirir. Yanlış modu seçerseniz doğru ses dosyası yanlış URL'nin arkasında kalır.

1. Yalnızca içerikten dil tespiti (URL'de dil kodu yok)

Bu en zorlu durumdur. example.com/about adresi, çerez veya tarayıcı tespitine göre bir ziyaretçiye İngilizce, bir diğerine Almanca sunar. Sayfa önbellekleri tek bir URL görür ve tek bir varyantı depolar. Önbelleğin ilk yakaladığı dil kazanır.

Metin okuma açısından ses dosyasının kendisi sorunsuzdur; çünkü URL'ye değil, gönderi kimliğine bağlıdır. Sorun, oynatıcıyı gömülen sayfadır. Önbelleğe alınmış İngilizce sayfa Almanca ses yerleştirmesiyle yüklenirse oynatıcı Almanca çalmaya devam eder; ancak ziyaretçiler İngilizce metin bekler. Bu URL modunu önbelleğe alan hiçbir sitede önermiyoruz.

2. Dizin tabanlı URL'ler (/en/, /de/)

Varsayılan ayar budur ve önerdiğimiz yapı da budur. Her dil kendi yolunda bulunur. Önbellekler /en/about ve /de/about adreslerini ayrı anahtarlar olarak ele alır. Doğru sayfa, doğru oynatıcı ve doğru ses dosyasıyla yüklenir. Çerez kurgusuna gerek kalmaz.

«Varsayılan dil için URL dil bilgisini gizle» seçeneğine dikkat edin. Bu seçenek etkinleştirildiğinde varsayılan dil önekini bırakır. /about İngilizce olur, /de/about Almanca kalır. Üçüncü taraf kodlarındaki URL tabanlı dil tespiti, kısa ad görmediği için varsayılan dil yollarında başarısız olur. Bu seçeneği kullanıyorsanız URL ayrıştırması yerine pll_current_language() fonksiyonunu tercih edin.

3. Alt alan adı (en.example.com, de.example.com)

Alt alan adları her dile kendi ana bilgisayarını ve önbellek ad alanını verir. Metin okuma oynatıcıları her dilde temiz yüklenir. Bunun bedeli ise DNS yapılandırması, alt alan adı başına SSL sertifikası ve biraz daha karmaşık analitiktir. Büyük ölçekte iyi çalışır.

4. Dil başına ayrı alan adı

Tam ayrıştırma. İngilizce için example.com, Almanca için example.de. Metin okuma, sesi her WordPress kurulumunda gönderi kimliğine bağlar ve oynatıcı aynı şekilde çalışır. Bu mod, hâlihazırda ülke kodu alan adına sahip markalar tarafından yaygın olarak kullanılır.

Çerez yönlendirme sorunu

Polylang, bir ziyaretçinin ana sayfaya ilk ziyaretinde tarayıcı dilini tespit edebilir. Ardından pll_language çerezini ayarlar ve ziyaretçiyi eşleşen dil sürümüne yönlendirir. Sayfa önbelleklemesiyle birleştiğinde yanlış dildeki ses tam olarak burada ortaya çıkar.

Yeniden ürettiğimiz hata sırası şöyle gelişir. Fransız bir ziyaretçi ana sayfaya gelir. Polylang Fransızcayı tespit eder, pll_language çerezini ayarlar ve ziyaretçiyi /fr/ adresine yönlendirir. Önbellek bu yönlendirme yanıtını ana sayfa URL'si altında depolar. Bir sonraki ziyaretçi, İngilizce konuşan biri, ana sayfayı ister ve önbelleğe alınmış /fr/ yönlendirmesini alır. Fransızca sayfaya düşer, Fransızca ses duyar ve siteden çıkar.

Dizin tabanlı URL'lerde bu sorun yalnızca ana sayfayla sınırlı kalır; çünkü diğer tüm sayfalar her dil için ayrı bir önbellek anahtarına sahiptir. «İçerikten dil tespiti» modunda ise aynı sorun sitedeki tüm URL'lere yayılır.

Üç çözüm işe yarar. En basiti, önbelleğe alan herhangi bir sitede tarayıcı dil tespitini kapatmak ve ziyaretçilerin dil değiştirici aracılığıyla seçim yapmasına izin vermektir. İkincisi, önbellek eklentinize pll_language çerezine göre farklı sürüm tutmasını veya çerezi atlamasını söylemektir. Üçüncüsü ise ana sayfayı sayfa önbelleğinin dışında tutmak ve tespit yönlendirmesinin her zaman canlı çalışmasını sağlamaktır.

WP Rocket, W3 Total Cache veya LiteSpeed kullanıyorsanız çerez yapılandırması için önbellekleme entegrasyon belgelerimize bakın. Polylang bu önbellek eklentileriyle birlikte çalışır; ancak birlikte çalışmak, dil farkındalığı anlamına gelmez. Önbelleği kendiniz yapılandırmanız gerekir.

Ön yüzde AJAX davranışı

Polylang, ön yüz AJAX isteklerinde geçerli dili otomatik olarak algılar ve o dil için metinleri yükler. Belirli bir dili zorlamak için isteğe açık bir lang değişkeni de aktarabilirsiniz. Metin okuma açısından bu durum, ses oynatıcısı veya ilgili gönderi aracı farklı bir gönderiyi getirmek için AJAX çağrısı yaptığında önem kazanır.

Testlerimizde Polylang bunu sorunsuz yönetiyor. WPML yazısında belgelediğimiz AJAX dil gerilemelerini burada görmedik. Özel bir entegrasyon, geçerli dil dışındaki bir dilde gönderi getiriyorsa lang değişkenini açıkça aktarın ve sonucu okumadan önce function_exists('pll_current_language') kontrolünü yapın.

Polylang sitesinde Metin Okuma - TTSWP kurulumu

Bu adımlar Polylang'ın kurulu olduğunu ve en az bir çevirinin mevcut olduğunu varsayar.

  1. Metin Okuma - TTSWP'yi WordPress.org eklenti sayfasından kurun. Etkinleştirin. İzin hatasıyla karşılaşırsanız kurulum belgelerine bakın.
  2. Eklentiyi TTSWP'ye bağlamak için bağlantı kılavuzunu takip edin. Ücretsiz plan, ücretli bir plana geçmeye karar vermeden önce test yapabilmeniz için başlangıç kredisi içerir.
  3. Orijinal dildeki gönderiyi açın ve ses oluşturun. Oynatıcının ön yüzde göründüğünü doğrulayın.
  4. Çevrilmiş sürüme geçin; bunun için gönderi düzenleyicisindeki Polylang dil değiştiricisini kullanın. Sesi yeniden oluşturun. Polylang farklı bir gönderi kimliği yüklediğinden TTSWP bunu yeni bir oluşturma işlemi olarak değerlendirir ve ayrı bir dosya saklar.
  5. Her çeviri için sesi seçin. Ses seçimi gönderi düzeyinde gerçekleşir. Gönderi bazında geçersiz kılma için ses seçimi belgelerine bakın.
  6. Ön yüzde doğrulayın. /en/gonderi-slug ve /de/gonderi-slug adreslerini farklı sekmelerde açın. Her birini çalıştırın. Sesler ve diller eşleşmeli.

Şu an itibarıyla TTSWP'deki dil bazında varsayılan ses eşlemesi öncelikle WPML ve Weglot'u kapsar. Polylang'da ses seçimi gönderi düzeyinde gerçekleşir ve aşağıda açıkladığımız gönderi dili okuması aracılığıyla dil bazında varsayılan ses çalışır. Çoğu Polylang sitesi için bu yeterlidir; çünkü her çeviri gerçek bir gönderdir ve ses bir kez gönderi başına ayarlanır. Mevcut davranış için Polylang entegrasyon belgelerine bakın.

Polylang dil değiştirici ve TTSWP ses panelini yan yana gösteren WordPress gönderi düzenleyicisi
Her Polylang çevirisi ayrı bir gönderidir; bu nedenle ses oluşturma ve ses seçimi çeviri bazında gerçekleşir.

Ses seçiminde gönderi dili nasıl okunmalı?

Polylang'da bir gönderinin dilini okumak için doğru API pll_get_post_language() fonksiyonudur. Polylang'ın kendi geliştirici yönergelerinin önerdiği gibi, bu fonksiyonu çağırmadan önce mevcut olup olmadığını her zaman kontrol edin. Kullanım şu şekildedir:

if ( function_exists( 'pll_get_post_language' ) ) {
    $lang = pll_get_post_language( $post_id, 'slug' );
    // $lang artık 'en', 'de', 'fr' vb. olur.
}

Ön yüz bağlamında pll_current_language(), geçerli istek dilini döndürür. Her iki fonksiyon da kararlıdır ve yıllardır Polylang genel API'sinin bir parçasıdır. Ses eşleme mantığı her zaman site varsayılanından değil, gönderi dilinden okumalıdır; aksi hâlde çeviriler yanlış sesi devralır.

Polylang ücretsiz ve Polylang Pro: metin okuma için fark var mı?

Ses için Polylang Pro'ya ihtiyacınız yok. Polylang'ın ücretsiz sürümü TTSWP'nin ihtiyaç duyduğu her şeyi sunar: gönderi bazında çoğaltma, dil kısa adları ve yukarıdaki genel API fonksiyonları.

Polylang Pro; DeepL makine çevirisi, REST API desteği, çevrilmiş URL kısa adları ve dış kaynaklı çeviri çalışmaları için XLIFF dışa aktarımı ekler. Bunların hiçbiri blog gönderileri ve sayfalar için metin okuma tablosunu değiştirmez. WooCommerce için Polylang, mağaza sayfalarını, ürün kategorilerini, özniteliklerini ve işlem e-postalarını yöneten ayrı bir ücretli eklentidir. Ürün açıklamalarında ses okuma istiyorsanız WooCommerce metin okuma rehberimize bakın.

Dil başına sesle SEO ve AEO

Polylang hreflang etiketlerini otomatik olarak yönetir; bu da çok dilli siteler için SEO çalışmasının büyük bölümünü oluşturur. Her dil sürümüne AudioObject şeması ekleyin, her birini o çeviriye ait dosyaya yönlendirin ve arama motorlarına net bir sinyal verin.

Kendi testlerimizde, ses ve AudioObject şeması içeren makaleler yapay zeka arama motorları tarafından daha sık alıntılanıyor. Yöntemi ve sonuçları AEO ve ses yazımızda belgeledik. Kısa özet: çeviri başına bir ses dosyası, çeviri başına şema ve AEO faydası kendiliğinden gelir.

Yaygın sorunlar ve çözümleri

BelirtiOlası nedenÇözüm
Çeviri yanlış sesle çalıyorSes gönderi bazında değil, genel düzeyde ayarlanmışÇevrilmiş gönderiyi açın, o gönderi için sesi ayarlayın ve yeniden oluşturun
Bir dilin sesi yokO çeviri için hiç ses oluşturulmamışÇevrilmiş gönderiyi düzenleyicide açın ve oluştur düğmesine tıklayın
Önbelleğe alınmış sayfa yanlış dilde oynatıcı gösteriyorÖnbellek tespit yönlendirmesini veya tek dil varyantını depolıyorTarayıcı dil tespitini kapatın ya da önbelleği pll_language çerezine göre çeşitlendirin
Arapça veya İbranice oynatıcı düzeni bozuk görünüyorOynatıcıya RTL CSS uygulanmamışÖzel CSS ile RTL geçersiz kılmaları ekleyin
Oynatıcı arayüzü metinleri varsayılan dilde kalıyorEklenti metinleri çeviri için kayıt edilmemişPolylang'ın bunları dizeler çeviri ekranında göstermesi için pll_register_string ile oynatıcı metinlerini kaydedin
Tüm gönderiler için ses varsayılan dilde oluşturuluyorSes eşlemesi site yerel ayarını okuyor, gönderi dilini değilGönderi dilini pll_get_post_language($post_id, 'slug') ile doğrulayın
Her biri ayrı önbellek anahtarına ve ses dosyasına sahip üç dil yolunu gösteren illüstrasyon; Arapça için RTL düzeni dahil
Dizin tabanlı URL'ler her çeviriye kendi önbellek anahtarını verir; bu da yanlış sesin yanlış sayfada çalmasını engeller.

Erişilebilirlik notu

Dil başına ses okuma eklemek aynı zamanda bir erişilebilirlik kazanımıdır. Ana dilinde daha iyi okuyan ancak dinlemeyi tercih eden ziyaretçiler artık her ikisine de sahip olur. Siteniz WCAG 2.2 veya Avrupa Erişilebilirlik Yasası kapsamındaysa geçerli kriterlere yönelik WCAG ses uyumluluk rehberimize bakın. WordPress'e metin okuma eklemenin kapsamlı bir anlatımı için ana eğitim temel konuları ele alıyor.

Sıkça sorulan sorular

Polylang metin okuma ile çalışır mı?

Evet. Polylang her çeviriyi kendi kimliğiyle ayrı bir WordPress gönderisi olarak saklar; TTSWP'nin gönderi bazında ses için kullandığı mimari de tam bu şekilde çalışır. Her çeviride ses oluşturun ve seçtiğiniz sesle her dil için ayrı bir dosya elde edin. Polylang'ın ücretsiz sürümü yeterlidir. Standart TTSWP kurulumunun ötesinde özel bir yapılandırma gerekmez.

Ses için Polylang Pro gerekli mi?

Hayır. Polylang'ın ücretsiz sürümü TTSWP'nin ihtiyaç duyduğu her şeyi sunar: dil bazında gönderi çoğaltma, dil kısa adları ve pll_get_post_language() ile pll_current_language() genel API fonksiyonları. Polylang Pro; DeepL makine çevirisi, REST API desteği ve çevrilmiş URL kısa adları ekler. Bunların hiçbiri ses oluşturma veya çalma biçimini değiştirmez.

Her dilin kendi sesi olabilir mi?

Evet. Her çeviri ayrı bir gönderi olduğundan ses seçimi gönderi düzeyinde gerçekleşir. Almanca çeviriye Almanca ses, İspanyolca çeviriye İspanyolca ses seçin ve böyle devam edin. TTSWP bu tercih her gönderi için kaydeder ve her yeniden oluşturmada kullanır. Mevcut davranış için dil ve ses eşleme belgelerine bakın.

Sesim neden yanlış dilde çalıyor?

Olağan neden, sayfa önbelleklemesinin Polylang'ın tarayıcı dil tespiti ile birleşmesidir. Önbellek, ana sayfa yönlendirmesini veya tek dil varyantını depolar ve herkese aynısını sunar. Ses dosyasının kendisi, gönderi kimliği için doğrudur. Onu yükleyen sayfa değildir. Önbelleğe alan sitelerde tarayıcı tespitini kapatın ya da önbellek eklentinize pll_language çerezine göre farklı sürüm tutmasını söyleyin. Dizin tabanlı URL'ler (/en/, /de/) sorunu yalnızca ana sayfayla sınırlar; çünkü diğer tüm sayfalar ayrı bir önbellek anahtarına sahiptir.

Polylang, WPML'den metin okuma açısından nasıl farklıdır?

Her ikisi de gönderileri dil bazında çoğalttığından, gönderi bazında ses her ikisinde de aynı şekilde çalışır. Farklar AJAX yönetiminde, çerez davranışında ve geliştirici API adlarındadır. Polylang, pll_ ön ekli fonksiyonlar kullanır ve genellikle daha hafiftir. WPML'nin yerleşik WooCommerce özellikleri daha kapsamlıdır; ancak eklenti boyutu da daha büyüktür. Bu konuyu WPML yazımız ele alıyor.

Ses oynatıcısının etiketlerini çevirebilir miyim?

Evet, bir ek adımla. Polylang, UI metinlerini pll_register_string() ile kaydeden eklentiler için bir dizeler çeviri ekranı sunar. Oynat düğmesi, süre etiketi veya başka bir oynatıcı metninin dille birlikte değişmesini istiyorsanız bu metinleri alt temanıza veya küçük bir site özel eklentisine kaydedin. Metinler ardından Diller, Dizeler çevirileri bölümünde görünür.

Sonraki adım ne?

WordPress düzenleyicisinde çevrilmiş gönderilerinizden birini açın ve ses paneline bakın. Varsayılan olarak doğru dili gösteriyorsa kurulum tamamdır. Göstermiyorsa o çeviride sesi ayarlayın, yeniden oluşturun ve ön yüzü kontrol edin. Bir çeviri çalışmaya başladığında diğerleri de aynı yöntemi izler.

Metin Okuma - TTSWP'yi henüz kurmadıysanız WordPress.org'dan edinin ve ücretsiz TTSWP hesabınıza bağlayın. Bir çeviride test edin, dinleyin ve geri kalan gönderilere yayıp yaymamaya karar verin.