Nasıl .po Dosyalarını .mo'ya Derlersiniz (4 Yöntem)

Bir öğleden sonrayı Almanca çeviriyi mükemmelleştirmekle geçirdiniz. de_DE.po dosyanızdaki her bir dizge harika okunuyor, yer tutucular sağlam, çoğullar doğru. Dosyayı sitenize yüklüyorsunuz, dili Almancaya çeviriyorsunuz ve... hiçbir şey. Sayfa hâlâ İngilizce. Dosya adını, klasörü, metin alanını tekrar kontrol ediyorsunuz. Her şey doğru görünüyor. Peki neden WordPress çevirinizi göstermiyor?
On defadan dokuzunda yanıt aynıdır: .po dosyasını düzenlediniz ama hiçbir zaman .mo'ya derlemediniz. WordPress çalışma zamanında .po dosyalarını okumaz — derlenmiş ikili .mo dosyasını yükler. Çevirilerinizin gerçekten görünmesini istiyorsanız, metni her değiştirdiğinizde po'yu mo'ya derlemeniz gerekir. .po düzenlenebilir kaynağınızdır; .mo ise sitenin sunduğu dosyadır.
Bu kılavuz, derleme adımının neden var olduğunu açıklıyor ve ardından bunu yapmanın dört güvenilir yolunu anlatıyor: WP-CLI, klasik msgfmt komutu, Poedit ve sizin için .mo dosyasını otomatik olarak üreten bir bulut aracı. Ayrıca en yaygın tuzağı — yeniden derlemeyi unutmayı — ve WordPress'in hız için artık tercih ettiği yeni .l10n.php formatını da ele alacağız.
WordPress Neden .po Değil, .mo Yükler?
WordPress .mo dosyalarını yükler çünkü bunlar hızlı aramalar için optimize edilmiş derlenmiş ikili dosyalardır; oysa .po dosyaları insanların okuması ve düzenlemesi için oluşturulmuş düz metinlerdir. Her sayfa yüklemesinde metni ayrıştırmak yavaş olur; önceden oluşturulmuş bir ikili karma tabloyu okumak neredeyse anlıktır.
Bir .po dosyası satır tabanlı ve insan dostudur. Her giriş, bir kaynak msgid ile çevrilmiş bir msgstr'yi eşleştirir ve dizgenin nereden geldiğini belirten yorumlar içerir. Bu, düzenleme için harikadır ancak performans için korkunçtur — sunucunun her istekte tüm metin dosyasını yeniden ayrıştırması gerekir.
#: includes/cart.php:88
msgid "Your cart is empty"
msgstr "Ihr Warenkorb ist leer"
Bir .mo dosyası, aynı dizge çiftlerini dahili bir arama tablosuyla ikili bir formata dönüştürür, böylece WordPress metni taramadan doğrudan bir çeviriye atlayabilir. Dezavantajı, .mo'nun insanlar tarafından okunamaz olması ve .po değiştiğinde yeniden oluşturulması gerektiğidir. .po ile .mo arasındaki ayrım hala bulanıksa, .po vs .mo vs .pot dosyaları açıklandı başlıklı açıklayıcımız her formatı ve birbirleriyle nasıl ilişkili olduklarını detaylıca inceliyor.
po'yu mo'ya Derlemenin Dört Yolu
Tek bir "doğru" araç yoktur — en iyi seçim, hali hazırda nasıl çalıştığınıza bağlıdır. Aşağıda, tek satırlık bir komuttan tamamen otomatikleştirilmiş bir bulut iş akışına kadar dört güvenilir yöntem bulunmaktadır. Dördü de WordPress'in çalışma zamanında yüklediği özdeş ikili .mo dosyasını üretir.
Yöntem 1: WP-CLI
En temiz modern yaklaşım, tek bir komutla tüm .po dosyası klasörünü derleyebilen WP-CLI'dır. WordPress'i zaten komut satırından yönetiyorsanız, bu iş akışınıza doğal olarak uyacaktır.
# Compile every .po file in the languages folder to .mo
wp i18n make-mo languages/
# Compile into a specific destination directory
wp i18n make-mo languages/ build/languages/
make-mo komutu hedef dizini tarar, bulduğu her .po dosyasını derler ve yanına (veya belirttiğiniz hedefe) eşleşen bir .mo dosyası yazar. Grupları sorunsuz bir şekilde işler, bu da aynı anda birçok dili sürdürdüğünüzde onu ideal kılar. WP-CLI kullanan herhangi bir proje için önerilen araçtır.
Yöntem 2: msgfmt
Bu iş için orijinal Gettext yardımcı programı, GNU gettext paketinin bir parçası olan msgfmt'dir. Tek bir .po dosyasını tek bir .mo dosyasına derler ve hemen hemen her Linux ve macOS sisteminde bulunur.
# Compile one file
msgfmt my-plugin-de_DE.po -o my-plugin-de_DE.mo
# Add statistics about translated, fuzzy, and untranslated strings
msgfmt --statistics my-plugin-de_DE.po -o my-plugin-de_DE.mo
# Install it first if missing
# macOS: brew install gettext
# Debian: sudo apt-get install gettext
-o bayrağı çıktı dosyasının adını belirler. --statistics bayrağı gerçekten kullanışlıdır — size kaç dizgenin çevrildiğini, belirsiz olduğunu veya hala boş olduğunu söyler, böylece eksik bir çeviriyi göndermeden önce yakalarsınız. Bir seferde tek bir dosyayı betiklemek için msgfmt güvenilir, sade bir seçimdir.
msgfmt düz bir komut satırı aracı olduğu için otomasyona kolayca entegre olur. Tüm bir klasörü derlemek için bir kabuk döngüsüne sarabilir veya bir CI işlem hattına bağlayarak .po dosyasına dokunan her commit'in otomatik olarak yeni bir .mo dosyası üretmesini sağlayabilirsiniz. Ortak bir kalıp for f in languages/*.po; do msgfmt "$f" -o "${f%.po}.mo"; done şeklindedir, bu da her dili tek bir geçişte derler. --check bayrağı doğrulama ekleyerek, üretim ortamına ulaşmadan önce msgid ve msgstr arasındaki format dizgesi uyuşmazlıklarını işaretler — çevrilmiş düzenleri sessizce bozan bozuk yer tutucu hatalarına karşı ucuz bir önlemdir.
Yöntem 3: Poedit (Kaydetmede Derleme Yapar)
Çevirileri grafik bir düzenleyicide düzenliyorsanız, Poedit sizin için otomatik olarak derleme yapar. Her .po dosyasını kaydettiğinizde, Poedit eşleşen .mo dosyasını hemen yanına yazar — ayrı bir komut yok, fazladan bir adım yok.
Bu, Poedit'in komut satırına aşina olmayan çevirmenler arasında popüler kalmasının nedenlerinden biridir. .po dosyasını açarsınız, çevirilerinizi yazarsınız, kaydet tuşuna basarsınız ve her iki dosya da birlikte güncellenir. Poedit'in tercihlerinde bu davranışı onaylayabilirsiniz; burada kaydetmede otomatik .mo derlemesi varsayılan olarak etkindir. Poedit ve benzeri masaüstü araçları, Mac ve Windows'ta PO dosyalarını düzenlemek ve çevirmek için en iyi 5 ücretsiz araç makalesinde incelenmiştir.
Bir masaüstü düzenleyicinin dezavantajı, derlemenin yalnızca bir insan dosyayı açtığında ve kaydettiğinde gerçekleşmesidir. Bu, tek kişilik bir proje için iyidir, ancak on iki dil veya dosyaları ileri geri gönderen bir ekip için ölçeklenmez. Birisi .po dosyasını farklı bir araçta düzenler ve Poedit'i açmadan depoya kopyalarsa, .mo hiçbir zaman güncellenmez. Daha büyük veya işbirlikçi projeler için, otomatik bir yöntem — komut satırı veya bulut — kaydet tuşuna basmayı hatırlama bağımlılığını ortadan kaldırır.
Yöntem 4: Sizin İçin .mo Oluşturan Bir Bulut Aracı
Dördüncü seçenek, derleme adımını tamamen ortadan kaldırır: derlenmiş .mo dosyasını çevrilmiş .po dosyasıyla birlikte döndüren bir bulut hizmeti kullanın. Hiçbir komut çalıştırmazsınız veya bir dosyayı iki kez kaydetmezsiniz — yüklersiniz ve bitmiş, doğru adlandırılmış dosyalar geri gelir.
SimplePoTranslate tam da bu şekilde çalışır. Bir .po veya .pot yüklersiniz, dizgeleri Bağlam Duyarlı Yapay Zeka ile çevirir ve yan yana oluşturulmuş .po ve .mo içeren tek bir ZIP dosyası döndürür — zaten derlenmiş, metin alanınız ve yerel ayarınızla eşleşecek şekilde zaten adlandırılmıştır. Ayrı bir derleme geçişi yoktur ve birini unutma ihtimali de yoktur.
Ayrıca manuel iş akışlarını bozan detayları da halleder. Sözdizimi Kilitleme, çeviriden önce %s, %1$s ve {name} gibi yer tutucuları ve HTML etiketlerini dondurur, böylece değişkenleriniz .mo içine bozulmadan kalır. Tam Gettext çoğul desteği, karmaşık çoğul formların da doğru bir şekilde derlenmesini sağlar — derinlemesine anlaşılması gereken bir konu, bunu Gettext çoğullarını anlama makalesinde ele alıyoruz. Ve bulutta çalıştığı için, yüklenecek bir eklenti veya bakımı yapılacak bir derleme aracı yoktur.
En Yaygın Tuzak: Yeniden Derlemeyi Unutmak
Çevirilerin görünmemesinin en büyük tek nedeni, .po dosyasını düzenlemek ancak .mo dosyasını yeniden derlemeyi unutmaktır. WordPress eski ikili dosyayı yüklemeye devam eder, bu yüzden taze ifadeleriniz asla görünmez — ve size nedenini söyleyecek bir hata mesajı da yoktur.
Akılda kalması gereken zihinsel model: .po sizin taslağınızdır, .mo ise yayınlanandır. .po dosyasında yapılan herhangi bir değişiklik, .mo dosyasını yeniden oluşturana kadar WordPress için görünmezdir. Her düzenlemeden sonra yeniden derlemeyi bir refleks haline getirin veya bu adımın asla atlanmaması için otomatik olarak derleme yapan bir araç kullanın.
Bu tuzak, hazırlık ortamından üretim ortamına geçişlerde özellikle sinsi olabilir. Bir geliştirici yerel olarak düzenler ve yeniden derler, çevirinin çalıştığını görür, ancak yalnızca .po dosyasını dağıtır ve .mo dosyasını unutur — böylece üretim ortamı sessizce eski metni korur. Çeviri dosyalarını ortamlar arasında taşırken, .po dosyasını ve yeni derlenmiş .mo dosyasını birlikte taşıyın veya ikili dosyanın her zaman mevcut kaynaktan yeniden oluşturulması için dağıtım adımınızın bir parçası olarak derleyin.
Yeniden derlemeden sonra çevirileriniz hala görünmeyi reddediyorsa, sorun genellikle bir adlandırma uyuşmazlığı, yanlış bir klasör veya eski dosyayı tutan bir önbellekleme katmanıdır. Tam kontrol listesi WordPress'te çevirileriniz neden görünmüyor makalesinde bulunmaktadır.
Daha Yeni .l10n.php Formatı Üzerine Bir Not
Son WordPress sürümleri üçüncü bir çalışma zamanı formatı tanıttı: .l10n.php. İkili bir .mo yerine, çeviriler, PHP opcode önbelleğinin bellekte tutabileceği düz bir PHP dizisi olarak depolanır, bu da yoğun sitelerde aramaları .mo'dan bile daha hızlı hale getirir.
<?php
return [
'domain' => 'my-plugin',
'messages' => [ 'Your cart is empty' => 'Ihr Warenkorb ist leer' ],
];
WordPress, eşleşen .mo dosyası mevcut olduğunda .l10n.php dosyalarını otomatik olarak oluşturur, bu yüzden bunları elle oluşturmanıza gerek yoktur. Şimdilik, doğru bir .mo dosyasını derlemek temel olmaya devam ediyor — performans formatı ondan türetilmiştir.
Toparlıyoruz
.po'yu mo'ya güvenilir bir şekilde derlemek için, çalışma şeklinize uygun yöntemi seçin: komut satırı toplu işlemleri için WP-CLI, istatistikli tek dosyalar için msgfmt, kaydetmede otomatik derleme için Poedit veya .mo dosyasını sizin için oluşturan bir bulut aracı, böylece bu adım asla atlanmaz. Dördü de WordPress'in çalışma zamanında ihtiyaç duyduğu aynı ikili dosyayı üretir.
Hangi yolu seçerseniz seçin, altın kuralı unutmayın: .po'yu düzenleyin, ardından .mo'ya derleyin — her seferinde. Bu tek alışkanlık, WordPress'teki en sinir bozucu çeviri hatasını, yani her şeyin doğru göründüğü ancak sitenin inatla İngilizce kaldığı hatayı önler.
Manuel derleme adımını kalıcı olarak atlamaya hazır mısınız? SimplePoTranslate'i ücretsiz deneyin — kredi kartı gerekmez.
.podosyanızı yükleyin ve dakikalar içinde ücretsiz katmanda kullanıma hazır bir.po+.mopaketi indirin.