WordPress eklentisi çevirisini nasıl hazır hale getiririm?


19

Çeviriye hazır bir eklenti oluşturmanın en iyi yolu nedir?

En başından tercüme edilmesi gerekmez, ancak farklı kültürlerden gelen geliştiricilerin eklentinin yerelleştirme sürecine katılabilmesi için kolayca çevrilebilir olması gerekir.

Yanıtlar:


38

1. Yerelleştirmeyi düşünerek yazın

Metin çıktısı oluşturmak için echoveya kullanmayın print(), bunun yerine WordPress işlevlerini kullanın __()ve _e():

/** Not localization friendly */
echo "Welcome to my plugin";    
// OR
print("Welcome to my plugin");

/** Localization friendly */
_e('Welcome to my plugin', 'my-plugin');
// OR
$my_text = __('Welcome to my plugin', 'my-plugin');
echo $my_text;

_e()ve __()ilk parametre olarak sağlanan metnin çevirisini - geçerli dilde - sağlayacaktır. _e()metni verirken metni __()döndürür.

İkinci parametre metin alanıdır , WordPress'e ilk parametre olarak sağlanan metnin bu eklentiye ait olduğunu söylemek için kullanacaksınız, istediğiniz herhangi bir adı kullanabilirsiniz, ancak eklenti için kullandığım adı kullanmayı tercih ediyorum dizinde daha sezgisel buluyorum.

"Merhaba <kullanıcı adı>" gibi dinamik metinler nasıl çıkarılır?

İle __()ve sprintf():

/** Get the username */
$username = 'Magictrick';

/** Not localization friendly */
echo "Hello $username";     

/** Localization friendly */
printf(__('Hello %s', 'my-plugin'), $username);
// OR 
$my_text = sprintf(__('Hello %s', 'my-plugin'), $username);
echo $my_text;

2. .pot / .po / .mo dosyalarını hazırlayın

Tanımlar

  • .Pot dosyası : eklenti geliştiricisi tarafından kullanılabilir ve yeni çeviriler oluşturmak için bir başlangıç ​​noktası olarak kullanılır, WordPress bunu kullanmaz.
  • Bir .po dosyası : sizin veya başka birinin başlattığı ve belki de tamamlanan bir çeviri dosyasıdır, WordPress bunu kullanmaz.
  • A.mo dosyası : Bir .po dosyasını kaydettiğinizde Poedit tarafından otomatik olarak oluşturulur, bu dosyalarla yapabileceğiniz tek şey, bir .po dosyası oluşturduğunuzda veya güncellediğinizde bunları yüklemek veya yeniden yüklemektir. WordPress .mo dosyalarından çeviriler alır .

Poedit'i açın ve şu ayarlarla yeni bir katalog oluşturun (Dosya ›Yeni Kataloğu ...) :

  • Proje bilgileri: (veya ekibiniz) bilgilerinizi kullanın, dil ve ülke eklentinizin varsayılan diliyle eşleşmelidir
  • Yollar:
    • Temel yol: .
    • Yollar: tümünü kaldır ve ekle .., (dil dosyasını diller adı verilen bir eklenti alt dizininde depolayacağız)
  • Anahtar kelimeler: tümünü kaldır & ekle __ve_e

Kaydet olarak katalog ve tarama güncelleme düğmesine basarak çevrilebilir metin için eklenti dosyaları. Güncelleme bu kataloğu kapatmayı bitirdiğinde, eklentinize yeni çevrilebilir dizeler (örn. Veya içine alınmış ) eklemediğiniz sürece bu dosyayı güncellemeniz gerekmez ./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin.pot__()_e()

Şimdi ilk çeviriyi oluşturalım (fr_FR kullanacağım):

Kullanılması Podeit , bir POT dosyasından bir katalog oluşturmak (Dosya> POT dosyasından Yeni katalog ...) :

  • Proje bilgisi: (veya ekibiniz) bilgilerinizi kullanın , dili ve ülkeyi değiştirin, Fransızca ve Fransa'yı kullanacağım
  • Yollar: Değişme
  • Anahtar kelimeler: Chage

Kataloğu olarak kaydedin . Bazı veya tüm dizeleri, Çevir kaydet tekrar po dosyası yüklemek po ve .mo dosyaları hem./my_wordpress_blog/wp-content/plugins/my-plugin/languages/my-plugin-fr_FR.po

Bir .po dosyasını kaydettiğinizde aynı adla bir .mo dosyası oluşturulduğunda , .po dosyasının dosya adının çok önemli olduğunu , bunun eklenti metin etki alanının (my-plugin) ve dil yerel ayarının ( fr_FR), her zaman .po dosyalarınızı şu gibi eklentiler için adlandırın: [textdomain] - [locale] .po , işte bazı örnekler:

  • İtalyan / İtalya: wpcf7-it_IT.po
  • Portekiz Brezilyası: wpcf7-pt_BR.po
  • Arapça: wpcf7-ar.po... Evet!

Eklenti yeni metinle her güncellendiğinde, güncelleme , po dosyasını çevirmek yeni dizeleri ve po ve .mo reupload dosyaları

3. Eklentiye, geçerli dil için çevrilmiş metni yüklemesini söyleyin

Eklentinizde bir yerde, WordPress'e .mo dosyanızı kullanmasını söylemelisiniz, eklenti dosyanızın başlangıcında bu kodu kullanarak yapabilirsiniz:

function my_plugin_init() {
  load_plugin_textdomain( 'my-plugin', false, 'my-plugin/languages' );
}
add_action('init', 'my_plugin_init');

İşlevin my-plugin1. ve 3. parametrelerinde eklenti adınızla değiştirin load_plugin_textdomain.

4. Test ve sorun giderme

Bazı nedenler işe yaramayabilir:

  • Dizeler .pot veya .po dosyasına aktarılmaz
    • → Yanlış katalog ayarları (yol veya anahtar kelimeler veya her ikisi)
  • Metin WordPress sitesinde çevrilmedi
    • → o dil için .mo dosyası eksik veya yanlış dosya adı var
    • → Metin alanı (yerine kullanılmaz _e('my text')ile _e('my text', 'my-plugin'))
    • → Metin alanı yüklenmedi (yukarıdaki doğru parametrelerle örneği kullanın, WP sizi hatalar konusunda uyarmaz)

3
1 Güzel yazma-up :) bu makalede bir göz atın: Yükleme WordPress dil doğru yolu dosyaları , " WordPress yükleme dil dosyalarının dışarı ağrı çekmek için Pratik kurallar ". :::::: Glotpress ve Polyglots grubu da bahsetmeye değer olabilir.
brasofilo

Bu güzel talimat için teşekkürler! It yetmeyecek sen _E () ve kullandığınız yere, load_plugin_textdomain () her yöntemde çağrılması gerekir söz __ ()
Andreas

2

Nabil'in cevabı oldukça eksiksiz ancak sağlanan kolay bir varyasyon var:

  1. Eklentiniz WordPress.org eklenti deposunda

  2. Eklentinizin yalnızca WordPress 4.6 veya üstü ile çalışmasını istemeye hazırsınız.

Adımlar şunlardır:

  1. Eklentinizin readme.txt dosyasına ekleyin Requires at least: 4.6. Bkz. Https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. zaten değilse, eklentinizi WordPress eklenti deposuna yükleyin. Bkz. Https://wordpress.org/plugins/developers/add/ .

  3. Eklentinizin bilgi / metin alanını bulun. Bunu yapmak için WordPress eklenti deposundaki eklentinizin sayfasına gidin. URL, https://wordpress.org/plugins/your-plugin-slug/ şeklinde olacaktır . URL'nin son kısmı olan "eklentiniz-slug", eklentinizin sümüktür. Çeviri işlevlerinin metin alanı için kullandığınız budur.

  4. Eklentinizde WordPress'in çeviri işlevlerini kullanın (gibi __e(‘hello’, ‘my-plugin-domain’);). Önceki adımda alınan doğru eklenti metin alanını kullandığınızdan emin olun. Daha fazla bilgi için https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ adresine bakın .

Yukarıdaki adımları uygularsanız, WordPress şunlarla ilgilenir:

  • Tüm çevrilebilir dizeler için Eklentiniz üzerinden ayrıştırma (Poedit veya başka bir şey yüklemenize ve çalıştırmanıza gerek yoktur)
  • Herkesin translate.wordpress.org adresindeki eklentinizin çevirilerine katkıda bulunmasını kolaylaştırın (kendi sitenizin eklentinizi çevirmeye adanmış olmasına veya çevirmenlerin çevirilerini size göndermesi için özel bir işlem yapmaya gerek yoktur)
  • Birisi eklentinizi kullandığında, WordPress kendi diline tercüme edilip edilmediğini kontrol eder ve eğer öyleyse, kendi dilinde gösterir (çeviri dosyalarını web sitelerine yüklemenize gerek yoktur)

(Buradaki blog yazımdan cevap: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/ )


Bunun neden reddedildiğinden emin değilim. Wordpress.org/plugins/print-my-blog çevirisine hazır hale getirmek için yaptım (ve eklenti başarıyla çevrildi)
thespacecamel

Bu, bir eklenti / tema WordPress eklenti deposunda değilse, ancak orada bir eklentinin metin alanını kullanıyorsa, wordpress yanlış çeviri dosyalarını yükleyeceği anlamına mı geliyor?
bodo

İyi soru @bodo. Bir eklenti, wp.org deposunda bulunan başka bir eklentinin metin alanını kullanmayı gösteriyorsa, WordPress'in wp.org eklentisinin çeviri dosyalarını mutlu bir şekilde kullanacağını düşünüyorum. Ama üzgünüm, emin değilim.
thespacecamel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.