Cum să internaționalizați temele și pluginurile WordPress

În 5 cărți de părere cardinală ale dezvoltării temelor WordPress, am vorbit pe scurt despre importanța internaționalizării temelor și pluginurilor, dar nu am discutat de fapt Cum să o facă. 

Dacă sunteți în tema comercială sau spațiul de plugin, atunci este aproape de așteptat ca munca dvs. să sprijine mai multe limbi. În acest articol, vom analiza ce înseamnă internaționalizarea, de ce este important și ce măsuri sunt necesare pentru a internaționaliza proiectul.


Înțelegerea internaționalizării

Când vine vorba de proiecte internaționale de WordPress, poate cel mai dificil aspect este de fapt înțelegerea modului de a face acest lucru - internaționalizarea unui proiect WordPress este de fapt foarte ușor de făcut.

Înainte de a ne uita la modul în care trebuie să facem acest lucru, este important să aruncăm o privire asupra importanței internaționalizării și a motivelor pentru care noi, ca dezvoltatori, ar trebui chiar să ne deranjăm să o facem.

Internaționalizarea definită

Pur și simplu, internaționalizarea este procesul prin care ne pregătim tema pentru traducere. Aceasta înseamnă că indiferent de ce limbă [vorbită] a fost folosită pentru a ne dezvolta activitatea, viitorii utilizatori (sau chiar dezvoltatorii) pot traduce cu ușurință proiectul pentru orice limbă necesară. Internaționalizarea nu necesită acest lucru noi furnizați traducerile (deși multilingvul dintre noi ar putea face acest lucru cu ușurință), doar că luăm măsurile necesare pentru ca viitorii traducători să facă acest lucru.

De ce sa te deranjezi?

Cu ani în urmă, aș fi spus că internaționalizarea ar trebui făcută numai dacă piața țintă pentru munca ta era ceva diferit de limba ta maternă, dar nu mai este cazul. Datorită Internetului, putem conversa, colabora, și să comunice cu oameni din întreaga lume. Publicul potențial pentru un anumit proiect este mai amplu decât era vreodată.

Cu atât mai mult, WordPress oferă un număr semnificativ de site-uri web moderne. În acest scop, ar trebui să ne gândim global la munca noastră. Am să susțin că internaționalizarea temelor sau pluginurilor comerciale nu mai este negociabilă. Dacă platforma pe care este construită lucrarea dvs. este folosită de o varietate de limbi - și WordPress este - și platforma menționată oferă o modalitate curată și simplă de a internaționaliza o temă - și WordPress o face - atunci este mai mult o chestiune de ce sunt eu nu internaționalizarea muncii mele.

Cum să internaționalizați

După cum sa menționat anterior, internaționalizarea unei teme este mai mult un efort de a înțelege funcțiile cheie din API-ul WordPress decât procesul actual de pregătire a textului. Deci, înainte de a examina un exemplu concret, să definim câțiva termeni și funcții importante: - Cheia de internaționalizare. Vă puteți gândi la acest lucru ca un context, domeniu sau identificator unic pentru șirurile dvs..

Indiferent, aceasta este o valoare unică, unică pe care WordPress o va folosi pentru a internaționaliza textul în întreaga temă. - __ (text $, cheie cheie) este o funcție care returnează un șir tradus. Această funcție nu echivă, nu imprimă sau nu afișează șirul. Este adesea folosit când trebuie să efectuați o altă operație pe șirul tradus (cum ar fi trecerea acestuia într-o altă funcție). Acceptă două argumente - șirul de traducere și cheia de internaționalizare.- _e ($ text, $ key) este o funcție care echivă efectiv șirul tradus.

Acest lucru este folosit cel mai bine atunci când trebuie să extrageți o valoare tradusă și să o afișați undeva în tema sau pluginul dvs. - load_theme_textdomain ($ domain, $ translation_directory), load_plugin_textdomain ($ domain, $ translation_directory) sunt două funcții care spun WordPress unde să vă localizeze traduceri. Vom examina aceste funcții puțin mai detaliat momentan.

Pentru moment, trebuie doar să știți că fiecare funcție servește aceluiași scop, deși unul este pentru teme, unul este pentru plugins.For cea mai mare parte, acest lucru este tot ceea ce este de a înțelege cum să internaționalizeze tema. De aici, vom analiza exact ceea ce este implicat în punerea în practică a acestor funcții.


Internaționalizarea muncii tale

Afișarea textului tradus

Înainte de a internaționaliza o temă, să aruncăm o privire la cum arată o piesă de markup standard:

Blogul meu WordPress

Doar unul dintre cele mai bune site-uri de pe Internet

Acest paragraf este doar cel mai bun paragraf care există în toate blogurile WordPress de pe Internet. Citiți-le și bucurați-vă.

Nimic spectaculos, nu? Arată ca o bucată standard de HTML (care este tot ceea ce este). Acordat, acesta este un exemplu simplu, dar este tot ceea ce este necesar pentru a demonstra cum să internaționalizați o temă.

Pentru a internaționaliza acest text de mai sus, trebuie să determinăm ce identificator unic vom folosi pentru a ne internaționaliza textul - o să merg cu "tutsplus". În al doilea rând, deoarece tot textul de mai sus este afișat pe ecran, vom folosi funcția __e (). Codul internaționalizat ar trebui să fie:

Dar ce despre textul care trebuie tradus înainte de a fi afișat pe ecran? Nu este mult diferit, dar să aruncăm o privire la modul în care putem internaționaliza barele laterale.

Procesarea textului tradus

Mai întâi, să stabilim bara laterală:

register_sidebar (array ('name' => 'Sidebar personalizat', 'id' => 'sidebar'));

Pentru referință, folosesc funcția register_sidebar disponibilă prin API-ul WordPress. Rețineți că numele barei laterale este redat pe ecranul Widgets. Ca atare, trebuie să o internaționalizăm; cu toate acestea, o matrice nu acceptă un șir ecou - acceptă o valoare de șir.

În acest caz, vom profita de funcția __ ():

register_sidebar (array ('name' => __ ('Custom Sidebar', 'tutsplus'), 'id' => 'sidebar'));

Destul de ușor, huh?

Rețineți că internaționalizarea ar trebui să se aplice doar textului static. Nu este responsabilitatea dezvoltatorului de a oferi internaționalizarea conținutului paginii, postarea conținutului și așa mai departe.


Pregătirea temei și / sau a pluginului pentru internaționalizare

După ce ați trecut prin tema dvs. și ați abordat corect textul care trebuie să fie internaționalizat, trebuie să spuneți temei sau pluginului unde să găsiți fișierele de internaționalizare. Vom arunca o privire mai profundă într-o clipă, dar în primul rând recomand că întotdeauna să creați un director "lang" în rădăcina directorului temă sau plugin pentru a stoca fișierele de internaționalizare.

Amintiți-vă funcțiile load_theme_text_domain și funcțiile load_plugin_text_domain de la mai devreme? Aici le folosim. Dacă lucrați cu o temă, va trebui să definim o funcție personalizată numită în cârligul after_setup_theme:

funcția custom_theme_setup ()  // final custom_theme_setup add_action ('after_setup_theme', 'custom_theme_setup');

Apoi, vom spune funcția unde să localizăm traducerile. Pentru a face acest lucru, adăugați următoarele la liniile din tema dvs. (rețineți comentariile care explică fiecare linie):

funcția custom_theme_setup () // Returnați directorul pentru fișierele de internaționalizare $ lang_dir = get_template_directory (). '/ Lang'); // Setați domeniul de text al temei folosind identificatorul unic de mai sus load_theme_textdomain ('tutsplus', $ lang_dir);  // sfârșitul custom_theme_setup add_action ('after_setup_theme', 'custom_theme_setup');

Relativ simplu, nu? Nu este deloc diferit pentru plugin-uri. Similar cu temele, am plasat mereu fișierele mele de internaționalizare a plugin-urilor într-un subdirector 'lang'. În primul rând, trebuie să-i spunem lui WordPress unde sunt localizate fișierele de internaționalizare. Presupunând că dvs. sunt situate într-un director "lang":

load_plugin_textdomain ('tutsplus', false, dirname (plugin_basename (__FILE__)). '/ lang /');

Al doilea parametru - unde am specificat "false" - este necesar, dar corespunde unei funcții depreciate în WordPress.

În cele din urmă, trebuie să determinăm unde să sunăm funcția load_plugin_textdomain. Dacă scriem un widget, atunci am plasat de obicei această funcție de apel în constructor:

clasa My_Custom_Widget funcția My_Custom_Widget () load_plugin_textdomain ('tutsplus', false, dirname (plugin_basename (__FILE__)). '/ lang /');  // end constructor / / end My_Custom_Widget

Dacă scriem un plugin de vanilie, atunci există o varietate de moduri în care puteți spune WordPress unde sunt localizate fișierele de traducere, dar aveți flexibilitate să vă așezați în after_setup_theme funcţie. Similar cu codul temei de mai sus, puteți plasa acest lucru în pluginul dvs.:

funcția custom_plugin_setup () load_plugin_textdomain ('tutsplus', falsă, dirname (plugin_basename (__FILE__)). '/ lang /');  // sfârșitul custom_theme_setup add_action ('after_setup_theme', 'custom_plugin_setup');

În acest moment, tema sau pluginul dvs. sunt pregătite pentru internaționalizare.


Două considerații suplimentare

În acest moment, ați terminat de fapt, dar întotdeauna merită să știți ce este necesar pentru a-ți lua locul de muncă și pentru a merge mai departe. Iată cele două sarcini restante pe care le vor efectua în mod normal traducătorii pentru a vă traduce tema

  • Tradu textul. Traducătorii vă vor procesa tema printr-o aplicație de traducere (cum ar fi POEdit) care va genera fișiere stocate în directorul "lang", unde WordPress va prelua fișierele.
  • Actualizări la WP-Config.php. În acest moment, traducătorii vor trebui să instruiască WordPress să permită internaționalizarea și să specifice ce limbă folosesc. Aceasta este dincolo de sfera de aplicare a acestui articol, dar puteți citi mai multe despre aceasta în Codul.

Spre deosebire de unele dintre celelalte medii de dezvoltare disponibile, WordPress o face incredibil de ușor să vă internaționalizeze munca. În mod evident, partea cea mai provocatoare este înțelegerea funcțiilor cheie necesare pentru a vă pregăti corzile pentru internaționalizare.

În plus, refacerea lucrărilor existente poate fi întotdeauna un proces consumator de timp. În contextul WordPress, poate fi plictisitor, dar este relativ ușor de făcut. Dacă aveți alte sugestii sau întrebări referitoare la internaționalizare, nu ezitați să le lăsați în comentarii!

Cod