ÖzelliklerEklentiFiyatlandırmaKaynaklar
Dili Değiştir
Kaynaklar.po vs .mo vs .pot: WordPress Çeviri Dosyaları Açıklandı

.po vs .mo vs .pot: WordPress Çeviri Dosyaları Açıklandı

SimplePoTranslate Team21 Nisan 2026
.po vs .mo vs .pot: WordPress Çeviri Dosyaları Açıklandı

Bir WordPress temasının languages klasörünü açtığınızda neredeyse aynı görünen üç dosya bulursunuz: twentytwentyfour.pot, twentytwentyfour-de_DE.po ve twentytwentyfour-de_DE.mo. Aynı tema, aynı dil, üç farklı uzantı. Hangisini düzenleyeceksiniz? WordPress aslında hangisini yüklüyor? Ve yanlış olanı düzenlemek çevirilerinizin neden sessizce kaybolmasına neden oluyor?

po vs mo dosya tartışmasında hangi dosyanın önemli olduğunu hiç merak ettiyseniz, yalnız değilsiniz. Bu üç uzantı, çevrilmiş her WordPress sitesinin omurgasını oluşturur, ancak aralarındaki fark hem yeni başlayanları hem de deneyimli geliştiricileri yanıltır. Yanlış dosyayı düzenlerseniz, Almanca ziyaretçileriniz hala İngilizce görür. Doğru olanı düzenleyip bir adımı atlarsanız da hiçbir şey değişmez.

Bu kılavuz, .pot, .po ve .mo dosyalarının tam olarak ne olduğunu, GNU Gettext iş akışı içinde nasıl ilişkilendirildiklerini, WordPress'te nerede bulunduklarını ve bir .mo dosyasını neden asla bir metin düzenleyicide açmamanız gerektiğini açıklamaktadır. Sonunda hangi dosyayı düzenleyeceğinizi ve hangisine dokunmamanız gerektiğini bileceksiniz.

.pot, .po ve .mo Dosyaları Nelerdir?

Kısacası: bir .pot dosyası boş şablondur, bir .po dosyası düzenlenebilir çevirinizdir ve bir .mo dosyası WordPress'in çalışma zamanında okuduğu derlenmiş ikili dosyadır. Bir zincir oluştururlar ve her bağlantının tam olarak bir görevi vardır.

Bu üç formatın hepsi, WordPress, Drupal ve binlerce PHP ve C projesinin güvendiği yerelleştirme sistemi olan GNU Gettext'ten gelir. Gettext, bir geliştiricinin yazdığı kaynak dizelerini bir çevirmenin sağladığı çevirilerden ayırır, böylece aynı kod tabanı tek bir PHP satırına dokunmadan düzinelerce dilde konuşabilir.

Bunu bir yemek tarifi kartı gibi düşünün. .pot, malzeme bölmeleri olan ancak miktarı olmayan boş karttır. .po, belirli bir yemek için doldurulmuş karttır. .mo, mutfağın servis sırasında gerçekten kullandığı lamine, makine tarafından taranabilen kopyadır. Kağıt karta yazarsınız; lamine olana asla karalamazsınız.

.pot Dosyası: Ana Şablon

Bir .pot dosyası (Portable Object Template), bir temadaki veya eklentideki her çevrilebilir dizeyi çeviriler boş bırakılmış olarak içerir. Bu, geliştiricilerin çevirmenlerin tam olarak neyin çevrilmesi gerektiğini bilmeleri için gönderdiği ana listedir. msgstr satırları boştur çünkü henüz bir dil seçilmemiştir.

#: includes/checkout.php:42
msgid "Add to Cart"
msgstr ""

#: includes/account.php:108
msgid "Your order has been shipped to %s"
msgstr ""

Boş msgstr "" ifadesine dikkat edin. Bir .pot bir şablondur, bir çeviri değildir. Her dil için bir kez kopyalar ve boşlukları doldurursunuz. Bir .pot dosyasını el ile nadiren düzenlersiniz; dizeler değiştiğinde kaynak koddan yeniden oluşturulur.

.po Dosyası: İnsan Tarafından Düzenlenebilir Çeviriniz

Bir .po dosyası (Portable Object), .pot dosyasının msgstr satırlarının tek bir dil için doldurulmuş bir kopyasıdır. Bu, çevirmenlerin ve geliştiricilerin aslında düzenlediği dosyadır. Düz metin, insan tarafından okunabilir ve sürüm kontrolü dostudur.

#: includes/checkout.php:42
msgid "Add to Cart"
msgstr "In den Warenkorb"

#: includes/account.php:108
msgid "Your order has been shipped to %s"
msgstr "Ihre Bestellung wurde an %s versandt"

msgid orijinal İngilizce kaynak dizedir ve asla değişmemelidir. msgstr sizin çevirinizdir. %s, çeviriye dokunulmadan kalması gereken bir yer tutucudur — onu düşürmek veya yeniden sıralamak, bozuk düzenlerin en yaygın nedenidir, bunu kod değişkenlerini bozmadan PO dosyaları nasıl çevrilir makalemizde ayrıntılı olarak ele alıyoruz.

.mo Dosyası: Derlenmiş İkili Dosya

Bir .mo dosyası (Machine Object), .po dosyanızın derlenmiş, ikili versiyonudur. WordPress, .po dosyalarını çalışma zamanında verimli bir şekilde okuyamaz, bu yüzden bunun yerine önceden derlenmiş .mo dosyasını yükler. Bir metin düzenleyicide .mo dosyasını açmak okunamaz baytlar gösterir — bu insanlar için değil, makineler içindir.

WordPress load_textdomain() veya load_theme_textdomain() işlevlerini çağırdığında, bir .mo dosyası arar, ikili hash tablosunu ayrıştırır ve her msgid'yi eşleşen msgstr ile anında değiştirir. Bu ikili format, binlerce dizenin olduğu sitelerde bile aramaları hızlı hale getirir.

Gettext İş Akışında Üç Dosya Nasıl İlişkilendirilir?

Tek yönlü bir boru hattı oluştururlar: kaynak kodu bir .pot haline gelir, .pot dile özel bir .po haline gelir ve her .po bir .mo haline derlenir. Çeviriler her zaman tek yönde akar.

İşte tam yaşam döngüsü sırasıyla:

  1. Bir geliştirici, kullanıcıya yönelik dizeleri PHP kaynağının içindeki __() ve _e() gibi Gettext işlevleriyle sarmalar.
  2. Bir tarama aracı kaynağı okur ve sarılmış her dizeyi içeren .pot şablonunu oluşturur.
  3. Bir çevirmen, .pot dosyasını dile özel bir .po dosyasına (örneğin de_DE.po) kopyalar ve her msgstr'yi doldurur.
  4. Bitmiş .po ikili bir .mo dosyasına derlenir.
  5. WordPress, .mo dosyasını çalışma zamanında yükler ve çevrilmiş siteyi görüntüler.

Geliştirici daha sonra yeni dizeler eklediğinde, .pot yeniden oluşturulur, yeni girişler mevcut her .po dosyasına birleştirilir (eski çeviriler korunarak), çevirmen boşlukları doldurur ve .po tekrar .mo dosyasına derlenir. Bu döngü projenin ömrü boyunca tekrarlanır.

Kritik çıkarım: .po dosyasını düzenler, ardından .mo dosyasına derlersiniz. .mo dosyasını asla doğrudan düzenlemez ve .pot dosyasının içinde asla çeviri yapmazsınız. Daha derinlemesine uçtan uca bir resim istiyorsanız, WordPress yerelleştirmesi için nihai kılavuz tüm boru hattını örneklerle anlatmaktadır.

Adlandırma Kuralları ve Dosyaların Konumu

WordPress dosya adları konusunda katıdır. Adlandırmayı yanlış yaparsanız, mükemmel bir şekilde çevrilmiş .mo dosyanız basitçe göz ardı edilir, çünkü WordPress metin alanı ve yerel ayar'a dayalı kesin bir eşleşme arar.

Tema ve eklenti çevirileri için adlandırma deseni şöyledir:

# Pattern: textdomain-locale.po / .mo
twentytwentyfour-de_DE.po      # German (Germany) translation
twentytwentyfour-de_DE.mo      # compiled binary WordPress loads
twentytwentyfour-fr_FR.po      # French (France)
twentytwentyfour.pot           # template, no locale suffix

textdomain, __( 'Add to Cart', 'twentytwentyfour' ) gibi Gettext işlevlerine ikinci argüman olarak geçirilen dizeyle eşleşir. locale ise de_DE, fr_FR veya pt_BR gibi bir WordPress yerel kodudur. .pot şablonu, dile özgü olmadığı için yerel ayar eki taşımaz.

Konum, adlandırma kadar önemlidir. WordPress birkaç tahmin edilebilir yolu arar:

  • Tema çevirileri temanın kendi wp-content/themes/your-theme/languages/ klasöründe bulunur.
  • Eklenti çevirileri wp-content/plugins/your-plugin/languages/ içinde bulunur.
  • translate.wordpress.org'dan gelen çeviriler ve kullanıcı geçersiz kılmaları, öncelik taşıyan ve güncellemelerden etkilenmeyen global wp-content/languages/themes/ ve wp-content/languages/plugins/ dizinlerine yerleşir.

Doğru adlandırılmış bir de_DE.mo dosyasını doğru klasöre koyarsanız, Alman ziyaretçiler Almanca görür. Bir klasör derinliğine koyarsanız veya metin alanını yanlış yazarsanız, WordPress hatasız bir şekilde İngilizce'ye geri döner. Çevirileriniz görünmüyorsa, adlandırma veya yol uyuşmazlığı olağan suçludur ve kayıp çeviriler için sorun giderme kılavuzu her yaygın nedeni kapsar.

.mo Dosyasını Neden Asla Doğrudan Düzenlememelisiniz?

Bir .mo derlenmiş bir ikili dosya olduğu için, onu el ile düzenlemenin güvenli bir yolu yoktur — ve zorla yaptığınız herhangi bir değişiklik, .po dosyası bir sonraki derlendiğinde üzerine yazılacaktır. .po doğruluk kaynağıdır; .mo tek kullanımlık bir derleme yapısıdır.

Bu tek kural, "çevirim değişti ama site güncellenmedi" destek biletlerinin büyük bir kısmını açıklar. Biri bir dizeyi değiştirir, .po dosyasını kaydeder ve .mo dosyasını yeniden derlemeyi unutur. WordPress eski ikili dosyayı yüklemeye devam eder, bu yüzden yeni ifade asla görünmez. Çözüm her zaman: .po dosyasını düzenle, .mo dosyasına yeniden derle, yeniden yükle.

Bu kuralın önemli olmasının ikinci bir nedeni var: .mo dosyaları sürüm kontrolünde fark dostu değildir. İkili oldukları için, küçük bir kelime değişikliği Git geçmişinizde hiçbir gözden geçirenin okuyamayacağı opak bir bloğa neden olur. .po dosyasını izlenen doğruluk kaynağı olarak tutmak ve .mo dosyasını üretilen bir yapıt olarak ele almak, deponuzu incelenebilir ve çevirilerinizi denetlenebilir kılar.

Bunu düzinelerce dilde manuel olarak yapmak zahmetli ve hataya açıktır. İşte burada bir bulut iş akışı gerçek zaman kazandırır. SimplePoTranslate gibi araçlar, .po dizelerinizi çevirir ve eşleşen .po ve .mo dosyalarını birlikte içeren tek bir ZIP dosyası olarak geri verir — zaten derlenmiş, doğru adlandırılmış, wp-content/languages/ klasörüne bırakılmaya hazır. Manuel olarak derlenecek hiçbir şey yoktur ve eski bir .mo dosyasının oluşma şansı yoktur.

Ayrıca çeviri öncesinde %s, %1$s ve {name} gibi her yer tutucuyu ve HTML etiketlerini donduran Söz Dizimi Kilitleme uygular. Değişkenleriniz bozulmadan kalır, böylece düzeni bozan bir .mo dosyası asla yayınlamazsınız. Ve tamamen bulutta çalıştığı için sitenizi yavaşlatacak ek bir eklenti yoktur — bir dosya yüklersiniz ve bitmiş, derlenmiş çevirileri indirirsiniz.

Hepsini Bir Araya Getirmek

po vs mo dosya ayrımı oturduğunda, tüm WordPress çeviri sistemi artık gizemli gelmeyi bırakır. .pot geliştiricinin şablonu, .po çevirmenin düzenlenebilir çalışma kopyası ve .mo WordPress'in ziyaretçilere gerçekten sunduğu derlenmiş ikili dosyadır. Çeviriler tek yönde akar — şablondan .po'ya, oradan .mo'ya — ve siz yalnızca ortadaki dosyayı elle düzenlersiniz.

Çeviriyle ilgili sıkıntıların yüzde doksanını önleyen üç kuralı unutmayın: asla bir .pot dosyasının içinde çeviri yapmayın, bir .po dosyasını düzenledikten sonra her zaman .mo dosyasını yeniden derleyin ve textdomain-locale adlandırmasını tam olarak eşleştirin. Bunları takip ederseniz, çevrilmiş dizeleriniz her zaman görünecektir.

Çeviri dosyalarını elle derlemek ve adlandırmakla boğuşmayı bırakmaya hazır mısınız? SimplePoTranslate'i ücretsiz deneyin — kredi kartı gerekmez. .po veya .pot dosyanızı yükleyin ve dakikalar içinde ücretsiz planda kullanıma hazır bir .po + .mo paketi geri alın.