Bir çeviriyi düzelttiniz, PO dosyasını MO dosyasına derlediniz, yüklediniz ve siteniz hâlâ eski metni gösteriyor. WordPress 6.5 ve sonrasında en olası neden, WordPress’in MO dosyanızı hiç okumamasıdır. Yanında aynı adı taşıyan bir PHP çeviri dosyası durur ve WordPress onu tercih eder.
Bu rehber WordPress PO dosyalarını üç araçla MO dosyasına derler ve doğru bir MO dosyasının ekranda yine de hiçbir şeyi değiştirmemesinin nedenlerini de size gösterir. Bunlardan biri yalnızca Türkçede karşınıza çıkar: çoğul satırı.
- WordPress hangi dosyayı okur?
- msgfmt ya da Poedit ile derlemek
- WP-CLI ile derlemek ve yanındaki PHP dosyası
- Dosya nereye gider, onu ne ezer?
- Türkçe çoğul satırı: sıfır tekildir
- fuzzy işaretli girdiler siteye hiç ulaşmaz
- JavaScript metinleri JSON dosyası ister
- Doğrulama
- AIOWS Dil Derleyici
- Sık sorulanlar
- Kaynaklar
WordPress hangi dosyayı okur?
Aynı adı taşıyan üç dosya türü üç ayrı iş yapar:
| Dosya | Kim okur | Nedir |
|---|---|---|
eklentim-tr_TR.po | Siz ve Poedit gibi düzenleyiciler | Metin kaynağı. WordPress onu hiç okumaz. |
eklentim-tr_TR.mo | WordPress | Derlenmiş ikili katalog. |
eklentim-tr_TR.l10n.php | WordPress 6.5 ve sonrası | Aynı katalog, PHP dizisi olarak; daha hızlı yüklenir. |
İki derlenmiş dosya da varsa WordPress 6.5 ve sonrası .l10n.phpdosyasını yükler, .modosyanızı yok sayar; WordPress.org’dan gelen dil paketleri artık ikisini de içerir. Yani yalnızca MO dosyasını derlerseniz ve yanında aynı adlı bir PHP dosyası zaten varsa, değişikliğiniz görünmez kalır.
İki çıkış yolunuz var. PHP dosyasını da üretin; WP-CLI bölümü nasıl yapılacağını gösterir. Ya da eskimiş .l10n.phpdosyasını silin; WordPress o zaman MO dosyanıza döner. Dosya doğruysa ve metin yine değişmiyorsa, WordPress eklenti çevirileri görünmüyoryazısı dosyanın dışındaki nedenleri anlatır.
Bu yazının test sitesinde adım adım böyle oldu: aynı PO dosyasından bir .move onun .l10n.phpdosyası üretildi ve sayfanız o metni gösterdi. Bir metin değiştirilip yalnızca .moyeniden derlendiğinde eski metin yerinde kaldı; wp i18n make-phpPHP dosyasını yeniden yazınca bir sonraki yenilemede yeni metin göründü.
msgfmt ya da Poedit ile derlemek
msgfmt, GNU gettext’in derleyicisidir ve onu Linux sunucuların çoğunda ve Windows için Git’in içinde bulursunuz:
msgfmt --check --statistics -o eklentim-tr_TR.mo eklentim-tr_TR.po--checkbaşlığınızı ve %s, %dgibi yer tutucularınızı özgün metne göre denetler. --statisticskaç girdinizin çevrilmiş, fuzzy ve çevrilmemiş olduğunu size söyler; yüklemeden önce bu satırı okuyun.
Poedit’te PO dosyanızı kaydettiğinizde MO dosyası varsayılan olarak yanına yazılır. Poedit 3.10’da Windows ve Linux’ta bu ayarı Dosya› Ayarlar…› Genelaltında, Düzenleme grubunda bulursunuz: “Kaydederken MO dosyasını otomatik olarak derle”. Mac’te ayar, Poedit menüsündeki ayarlardadır.
İki araç da .l10n.phpdosyasını sizin için yazmaz.
WP-CLI ile derlemek ve yanındaki PHP dosyası
WP-CLI’nin i18n komutları iki biçimi de üretir:
wp i18n make-mo wp-content/languages/plugins/eklentim-tr_TR.po
wp i18n make-php wp-content/languages/plugins/eklentim-tr_TR.poHedef vermezseniz her komut dosyasını kaynağınızın yanına yazar ve her değişiklikten sonra ikisini de çalıştırırsanız, eskimiş PHP dosyası sorunu başınıza gelmez. Ama önce fuzzy işaretlerinizi temizleyin, çünkü fuzzy bölümünde göreceğiniz gibi iki komut da fuzzy girdileri dosyaya alır. make-phpWP-CLI 2.10.0 ile, make-mo2.5.0 ile geldi. Komutlardan biri yoksa wp cli versionile sürümünüze bakın.
Test sitesinde WP-CLI 2.12.0, iki komuta da tek satırla yanıt verdi: Success: Created 1 file.
Dosya nereye gider, onu ne ezer?
Dosya adını siz seçmezsiniz: eklentinin metin alanı, kısa çizgi, yerel kodu, uzantı. eklentim-tr_TR.moçalışır; eklentim-tr.move tr_TR.moçalışmaz. Metin alanını eklentinin ana dosyasındaki Text Domain:satırında bulursunuz.
WordPress önce wp-content/languages/plugins/klasörüne bakar (temalar için wp-content/languages/themes/), sonra eklentinin kendi languagesklasörüne. İlk klasöre koyduğunuz dosya kazanır.
Otomatik çeviri güncellemeleriniz de tam bu klasöre yazar. WordPress.org o eklenti için daha yeni bir dil paketi yayımladığında aynı adlı dosyanız değiştirilir; düzeltmeleriniz gider ve bunu size hiçbir şey söylemez.
Kendi çevirinizi sürdürüyorsanız PO dosyanızın bir kopyasını wp-content/languages/dışında saklayın; güncellemeden sonra yeniden derlersiniz. O klasörde zaten neler olduğunu görmek için WordPress dil dosyaları nasıl taranır ve yönetiliryazısına bakın.
Türkçe çoğul satırı: sıfır tekildir
PO başlığınızdaki bir satır, WordPress’in hangi çeviriyi seçeceğini belirler. WordPress.org’un Türkçe dil paketleri şunu kullanır:
"Plural-Forms: nplurals=2; plural=(n > 1);\n"Bu kurala göre 0 ve 1 tekil, 2 ve fazlası çoğul formu alır. Başlığı İngilizce ya da Almanca bir dosyadan kopyaladıysanız orada plural=(n != 1)yazar ve o başlıkla 0 sayısı çoğul formuna düşer. Türkçede iki form çoğu zaman aynı yazıldığı için fark görünmeyebilir; formları farklı yazdıysanız 0 için seçilen metin de değişir.
PO dosyasını elle başlatıyorsanız başlığı mevcut bir Türkçe çeviriden kopyalayın.
Test sitesinde iki formu farklı yazılmış bir girdiyle denendiğinde n > 1başlığıyla 0 ve 1 birinci formu, 2 ikinci formu gösterdi; n != 1başlığıyla 0 ikinci forma, yani çoğula geçti.
fuzzy işaretli girdiler siteye hiç ulaşmaz
fuzzy girdi, düzenleyicinizin tahmin ettiği ya da özgün metni değişmiş bir girdidir. PO dosyanızda #, fuzzyyorumunu taşır. Poedit onu size “Çalışma Gerekli” olarak işaretler.
msgfmt, siz --use-fuzzyeklemedikçe fuzzy girdileri MO dosyasına koymaz; böylece tamamen çevrilmiş dosyanız, her fuzzy girdide ekranda İngilizce gösterebilir. --statisticssize bunların sayısını verir.
Çeviriyi kontrol ettikten sonra işareti kaldırın ve yeniden derleyin; sayıyı güzel göstermek için --use-fuzzyile derlemeyin. Bir girdi, henüz kimse onaylamadığı için fuzzy’dir.
WP-CLI bu kurala uymaz; test sitesinde WP-CLI 2.12.0’daki wp i18n make-move wp i18n make-php, fuzzy girdiyi dosyalarına normal bir çeviri olarak yazdı ve ekranınız onaylanmamış metni gösterdi. WP-CLI ile derliyorsanız, kontrol etmediğiniz her fuzzy girdiyi önce boşaltın ya da onaylayın.
JavaScript metinleri JSON dosyası ister
Blok düzenleyicide ve arayüzünü JavaScript ile çizen eklentilerde gördüğünüz metinler MO dosyanızdan okunmaz. eklentim-tr_TR-adlı, her betik için ayrı JSON dosyalarından gelir.
PHP tarafındaki metin çevrilmiş ama düzenleyicideki bir düğme çevrilmemişse gördüğünüz budur. wp i18n make-jsonbu dosyaları aynı PO dosyasından sizin için üretir.
Doğrulama
| Kontrol | Beklenen |
|---|---|
PO dosyanızda msgfmt --check --statistics | Hata yok. fuzzy ve çevrilmemiş girdi sayıları beklediğiniz gibi. |
Başlıktaki Plural-Formssatırı | nplurals=2; plural=(n > 1); |
Klasörü listeleyin: .move varsa .l10n.php | İkisi de değişikliğinizden sonra yazılmış. PHP dosyası MO dosyasından eskiyse, yukarıdaki tuzaktasınız. |
| Bir girdiyi fuzzy olarak işaretleyin, derleyin, ekranı yenileyin | İngilizce özgün metni göstermeye devam etmeli.Tahmininizi gösteriyorsa derleyiciniz fuzzy girdileri almıştır. |
Son satır, derleyicinizin işarete uyduğunu size kanıtlar. Tüm satırları geçen bir kontrol yalnızca olağan yolunuzun çalıştığını gösterir. Bu satır ise onaylanmamış bir çevirinin ziyaretçilerinize kazara ulaşmadığını gösterir.
Kontrolü gerçekten kullandığınız araçla yapın. msgfmtbu kontrolü geçer; AIOWS Dil Derleyici de iki derleyicisiyle geçer, işareti yok sayan bir derleyici ise kalır. Test sitesinde msgfmt1.0 geçti, WP-CLI 2.12.0 ise hem make-mohem make-phpile kaldı.
AIOWS nasıl yardımcı olur?
AIOWS Dil Derleyici
Dil Derleyici, AIOWS’un kendi çevirileri için derleyicidir. Diğer eklentileriniz için genel bir PO düzenleyici değildir; aşağıdaki sınırlar bu çizginin tam olarak nerede olduğunu söyler.
AIOWS’un okuduğu yerde derler.AIOWS eklentinizin languagesklasöründeki PO dosyalarını MO dosyasına çevirir; tek tek ya da “Tüm Yerelleri Derle” ile hepsini birden. Sunucunuz PHP’nin msgfmtçalıştırmasına izin veriyorsa msgfmtkullanır, vermiyorsa kendi derleyicisini. İkisi de, msgfmtgibi, fuzzy girdilerinizi dışarıda bırakır; onaylanmamış bir çeviri ekranlarınıza hiç ulaşmaz. AIOWS kendi metin alanı için .l10n.phpdosyası getirmez; yukarıdaki PHP dosyası tuzağı bu dosyaları etkilemez. WordPress, modülün sizin için yazdığı MO dosyasını okur.
Derlemeden önce eksikleri gösterir.“Tara” sekmesi eklentinin kodunu PO dosyalarıyla karşılaştırır. AIOWS arayüzünün ne kadarının çevrildiğini bildirir, boş ve yinelenen girdileri listeler. Boş bir girdi hatasız derlenir ve yine de İngilizce gösterir; bu listeyi önce okuyun.
Düzenlediğiniz dosyayı alır.“Yükle / Yönet”, başka yerde, örneğin Poedit’te düzenlediğiniz bir PO ya da MO dosyasını alır ve AIOWS’un yüklediği yere koyar. Aynı adlı dosyanın yerine geçer, ama oradaki her dosyayı aynı ekrandan indirebilirsiniz; önce bir kopya alın.
Pratik değeri şudur: AIOWS’un Türkçe arayüzündeki bir etiketi SFTP’ye ve yerel bir gettext kurulumuna gerek kalmadan yönetim panelinizden düzeltirsiniz. Düzeltmeyi Poedit’te yaparsınız; yükleme ve derleme aynı sayfanın iki sekmesindedir, ardından ekranı yenilemeniz yeterlidir.

Sınırları açıkça şöyle. Yalnızca AIOWS’un kendi languagesklasöründeki dosyaları derler; başka bir eklentinin ya da temanın PO dosyası için yukarıdaki gibi msgfmt, Poedit ya da WP-CLI kullanırsınız. Yalnızca MO dosyası yazar; .l10n.phpve JSON yazmaz. Eski MO dosyasını kopyasını tutmadan değiştirir; geri isteyebileceğiniz dosyayı önce indirin. Tara sekmesi çoğul (_n()) metinlerini kapsama oranına katmaz; o metinleri kendiniz kontrol edin.
AIOWS Dil Derleyici’yi inceleyinAIOWS planlarını karşılaştırın
Sık sorulanlar
PO dosyasını sunucuya yüklemem gerekir mi?WordPress için gerekmez; yalnızca MO ve PHP dosyalarınızı okur. PO dosyanızı yine de saklayın, çünkü düzenleyebileceğiniz tek dosya odur.
MO dosyasını doğrudan düzenleyebilir miyim?Hayır. Derlenmiş ikili bir dosyadır. PO dosyanızı düzenleyin ve yeniden derleyin.
Derledim, hiçbir şey değişmedi. İlk neye bakayım?Aynı adlı bir .l10n.phpdosyası arayın. MO dosyanızdan eskiyse WordPress onu okuyordur.
Güncellemeden sonra çevirim neden kayboldu?Bir dil paketi wp-content/languages/plugins/içindeki dosyanızın yerine geçti. PO dosyanızı başka yerde saklayın ve yeniden derleyin.
Tema çevirisi de aynı yolu mu izler?Evet. wp-content/languages/themes/klasörünü ve temanızın metin alanını kullanırsınız.



