Internaționalizarea proiectelor WordPress Introducere

Acum câțiva ani, am scris despre procesul de internaționalizare a proiectelor bazate pe WordPress. Deși cred că există câteva momente în care tutorialele nu au nevoie neapărat de actualizare, revigorare sau revizuire, există alte momente în care putem beneficia toți de la revizuirea subiectului.

La urma urmelor, schimbările de software din an în an și, de asemenea, câștigăm experiență pe măsură ce continuăm să lucrăm cu un anumit software. WordPress nu este diferit. 

Începând cu acest articol și continuând cu următorul set de articole, vom examina următoarele:

  • ce înseamnă internaționalizarea în contextul WordPress
  • cum putem internaționaliza munca noastră
  • cum internaționalizarea și localizarea diferă
  • instrumente care sunt disponibile pentru localizare
  • cum să internaționalizați conținutul conținut în JavaScript
  • și altele

Vom chiar să construim un plugin de dimensiuni reduse, deși funcțional, care să ne ajute să demonstrăm practic punctele pe care le-am enumerat mai sus.

Înainte de a începe, totuși, este important să înțelegeți ce este internaționalizarea și ce oferă WordPress în modul de a face acest lucru. În plus, există câteva clicuri care vă pot surprinde, mai ales dacă sunteți un programator experimentat.

Cu ceea ce a fost prezentat ca o schiță a acestei serii, să începem să ne înțelegem în mod deosebit internaționalizarea activității noastre în WordPress.

Ce este internaționalizarea?

Codul WordPress este întotdeauna unul dintre cele mai bune locuri pentru a începe atunci când căutați să aflați mai multe despre un anumit subiect. Iată ce oferă pe calea internaționalizării (pe care îl abreviam și ca i18n doar în cazul în care îl vedeți scris în acest fel):

Internaționalizarea este procesul de dezvoltare a plugin-ului dvs., astfel încât acesta să poată fi ușor tradus în alte limbi.

În plus, Codex-ul continuă să descrie exact de ce este important acest lucru:

Deoarece WordPress este folosit peste tot în lume, este o idee bună să pregătiți un plugin WordPress pentru a putea fi tradus cu ușurință în orice limbă este necesară. În calitate de dezvoltator, este posibil să nu aveți un timp ușor de oferit localizări pentru toți utilizatorii; S-ar putea să nu-ți vorbești limba la urma urmei. Cu toate acestea, orice dezvoltator poate internaționaliza cu succes o temă pentru a permite altora să creeze o localizare fără a fi nevoie să modifice codul sursă în sine.

Are sens, nu? WordPress execută aproximativ un sfert din web și este folosit în întreaga lume. De ce munca pe care o oferim să rămână în limba maternă pe care o vorbim?

Acest lucru nu înseamnă că nu există momente în care acest lucru este în regulă. De exemplu, dacă construiți o soluție pentru cine și pentru dvs. ști că ei împreună cu un grup de mici ish vor folosi aplicația, atunci este logic să o lăsați în limba maternă a respectivului client.

Dar dacă construiți ceva pentru o distribuție pe scară largă, nu există nici o îndoială că ar trebui să vă internaționalizați munca.

Pe scurt, internaționalizarea este procesul prin care ne asigurăm că munca noastră poate fi tradusă în altă limbă.

Uitați tot ce știți despre variabile

Mai târziu, în acest articol, vom examina funcțiile din API-ul WordPress pentru a ne asigura că șirurile noastre PHP sunt bine internaționalizate. Dar este un avertisment incredibil de important pe care trebuie să-l amintiți.

Vă amintiți când ați învățat prima dată despre variabile în orice limbă de programare când? A fost grozav, nu? Ați putea defini o variabilă o singură dată și apoi reutilizați această variabilă în loc de șir (sau orice altă valoare) în orice alt loc din cod, astfel încât să nu trebuiască să vă repetați. 

De fapt, face parte din principiile de bază ale programării, nu-i așa??

Principiul DRY este declarat ca "Fiecare bucată de cunoaștere trebuie să aibă o reprezentare unică, lipsită de ambiguitate și autoritate într-un sistem".

Absolut, aproape fără echivoc sunt de acord cu această definiție. Dar când vine vorba de internaționalizarea șirurilor în WordPress, trebuie să facem o excepție. Veți vedea de ce moment, dar am ales să includeți aici această secțiune, pentru a evita orice altă greșeală viitoare. De asemenea, am optat să menționez acest lucru, astfel încât să nu întrebați dacă încercați să utilizați variabilele în contextul API-ului de internaționalizare în viitoarele puncte de contact.

Dacă vă aduceți aminte de acest lucru acum, veți evita acest obstacol mai târziu.

Interfața API

În acest moment, suntem gata să analizăm funcțiile oferite de WordPress. Nu le vom face să lucreze în acest articol special, dar vom analiza numele funcțiilor, cum să le folosim și la ce sunt folosite într-un context mai larg.

Începând cu articolul următor, vom începe să le punem în folosință. Pentru moment, să aruncăm o privire la ceea ce este disponibil.

  • __ () este, fără îndoială, cea mai populară sau cea mai comună funcție de internaționalizare pe care o veți găsi în lucrarea WordPress. Această funcție acceptă un singur șir de tradus și domeniul de domeniu la care va aparține. Nu ar trebui să includă niciodată orice cu excepția unui șir (adică fără HTML, fără JavaScript etc.).
  • _e () este similar cu funcția de mai sus, dar mai degrabă decât doar preluarea versiunii traduse a șirului, va econa, de asemenea, rezultatul traducerii pe ecran.
  • _X(): din păcate, acolo sunteți oriunde un șir dat va returna traducerea greșită. Când se întâmplă acest lucru, folosirea acestei funcții este utilă, mai ales când specificăm contextul în care a fost tradus șirul. Acest lucru va asigura că versiunea dorită a șirului este returnată.
  • _ex (), cum ar fi _e () și _X() enumerate mai sus, se va asigura că traducerea corectă a șirului este reluată pe ecran pe baza contextului specificat, astfel încât versiunea incorectă nu este selectată în timpul executării.
  • _n () este o funcție elegantă deoarece permite WordPress să selecteze versiunea singulară sau plurală a numărului specificat pe baza căruia se utilizează. Aceasta înseamnă că noi, ca dezvoltatori, trebuie să furnizăm șiruri pentru versiunea unică și plurală, astfel încât traducătorii să o traducă, împreună cu numărul real. Dar lucrează cu numerele internaționalizate mult mai ușor decât fără.
  • _nx () ar trebui să fie clar în acest moment cum funcționează. Este o combinație de _n () pe care tocmai am împărțit și _X() care a fost acoperit mai sus. Aceasta înseamnă că, dacă ați specificat corect forma singulară și plurală a numărului specificat împreună cu domeniul de text propriu, atunci traducerea va apărea conform așteptărilor.
  • _n_noop () ar trebui să sune oarecum familiar celor care sunt familiarizați cu informatica sau ingineria calculatoarelor. Un NOP este scurt pentru "nici o operație" și, în acest caz, este folosit pentru a fi traduse, plurală șiruri de caractere pe care nu dorim neapărat să le folosim la un anumit moment, dar ar putea dori să le recuperăm mai târziu. Pe scurt, traducătorul poate oferi traducerea și putem alege când să le folosim.
  • _nx_noop () este o combinație între funcția de mai sus și _X() funcția pe care am văzut-o de atâtea ori înainte. Acest lucru ne va permite să obținem acces la o traducere pentru un anumit domeniu de text fără a trebui să le traducem.
  • translate_noop_plural () citește un pic diferit față de funcțiile pe care le-am examinat până acum, dar implementarea este destul de simplă: această funcție oferă o traducere a rezultatului _n_noop () și _nx_noop ().  Lucrul cheie care trebuie notat cu privire la această funcție este că se așteaptă ca primul argument să fie o matrice cu cheile singulare și plurale care vin din funcțiile menționate mai sus.
  • esc_html __ () este foarte asemănătoare cu __ (), dar este destinat utilizării în etichete HTML. Adică, nu este vorba de asta Traduceți HTML, dar este destinat să apucă traducerea și să o scape pentru o utilizare sigură în contextul HTML.
  • esc_html_e () este la fel ca funcția de deasupra ei și aproape exact ca _e () funcția pe care am analizat-o mai sus; totuși, acesta este menit să fie folosit pentru a merge mai departe și a ecou rezultatul traducerii pe ecran.
  • esc_html_x () ar trebui să fie clar în acest moment, datează de câte ori am văzut _X() utilizate în alte funcții. Pe scurt, acest lucru va face același lucru _X(), dar va furniza textul în contextul gettext și îl va pregăti pentru o utilizare sigură în HTML.
  • esc_attr __ () este folosit pentru a lua șirul specificat și a scăpa corespunzător pentru a putea fi folosit în siguranță ca atribut, cum ar fi titlu atributul unei imagini.
  • esc_attr_e () va afișa textul tradus cu o codificare suplimentară a oricăror caractere, cum ar fi mai mari decât ampersanduri și citate. Aceasta este o altă funcție care este destinată a fi utilizată în contextul unui atribut al unui alt element.
  • esc_attr_x () va apuca traducerea, va scăpa de ea și apoi o va face în contextul atributului unui element. Dacă nu a fost furnizată nici o traducere, va fi folosit șirul prestabilit care a fost furnizat în timpul dezvoltării.
  • number_format_18n () este o funcție puternică, mai ales când lucrați cu o varietate de localuri. De exemplu, dacă lucrați cu un număr și doriți să afișați "1000", nu ați specifica un al doilea parametru pentru această funcție; cu toate acestea, dacă lucrați cu valută sau cu zecimale, atunci doriți să treceți "2" ca al doilea argument, astfel încât două digitale să fie atașate după o zecimală.
  • date_i18n () este o altă funcție puternică care vă va permite să preluați data într-un format localizat pe baza marcajului de timp specificat. Pentru a afla mai multe despre această funcție particulară, parametrii săi și exemple de utilizare a acesteia, consultați pagina Codex.

Amintiți-vă în secțiunea de mai sus unde am vorbit despre evitarea utilizării variabilelor? Acesta este locul în care acest lucru vine la îndemână. După cum ați observat fără îndoială, fiecare din funcțiile de mai sus are doi parametri:

  1. șirul care poate fi tradus
  2. domeniul de text al șirului

Domeniul de text se referă la o relație unică între pluginul WordPress sau tema WordPress, WordPress și traducătorul. În cele din urmă, trebuie să vă asigurați că traducătorul este capabil să furnizeze o traducere a șirului fără a exclude traducerea lui o alta șir în altă parte în WordPress (sau o altă soluție terță parte).

În cele din urmă, cel mai bun pariu este să utilizați blocajul pluginului ca domeniu de text. În plus, acest parametru ar trebui să fie întotdeauna un șir, nu o variabilă. Astfel, indiferent de câte ori ați terminat de scris, nu îl păstrați într-o variabilă. Doar introduceți domeniul text ca al doilea parametru în funcție.

Acest lucru are legătură cu modul în care funcționează instrumentele de traducere și vom examina mai detaliat acest lucru într-un articol viitor.

Concluzie

Și acesta este primul element al funcțiilor de internaționalizare. Dacă sunteți încă puțin confuză cu privire la modul de aplicare a unora dintre acestea în munca dvs., nu vă faceți griji. Mai sunt multe de acoperit atât în ​​termeni de explicații cât și în termeni de demonstrații practice.

De exemplu, am abordat pe scurt conceptul de gettext, nu? Și ce despre JavaScript? În plus, cum rămâne cu instrumentele pe care le avem la dispoziție pentru a le permite altora să ne traducă șirurile? Cum știm că funcționează corect?

Toate acestea vor fi acoperite în această serie. Dar înainte de a ajunge acolo, trebuie să începem cu elementele de bază. Așa am făcut noi. În următorul articol, vom relua vorbind puțin despre gettext și despre unele dintre instrumentele disponibile.

După aceea, ne vom îndrepta atenția asupra scrierii codului (inclusiv a JavaScript-ului) și a modului în care se potrivesc cu toții în contextul propriilor pluginuri WordPress.

Între timp, dacă căutați alte utilități care să vă ajute să vă construiți un set tot mai mare de instrumente pentru WordPress sau, de exemplu, pentru a studia și a deveni mai bine dezvoltate în WordPress, nu uitați să vedeți ce avem disponibil în Piața Envato.

Dacă sunteți interesat să aflați mai multe despre WordPress din perspectiva dezvoltării, rețineți că lucrez exclusiv cu WordPress și scriu adesea despre el. Poți să-mi iei toate cursurile și tutorialele pe pagina mea de profil și poți să mă urmărești pe blogul meu și / sau pe Twitter la @tommcfarlin unde vorbesc despre dezvoltarea de software în contextul WordPress.

Nu ezitați să lăsați întrebările sau comentariile în feedul de mai jos și mă voi adresa fiecăruia.

Cod