Cum să faci un plugin WordPress gata pentru traducere?

13 ian. 2013, 01:03:01
Vizualizări: 16.8K
Voturi: 24

Care este cea mai bună metodă de a crea un plugin care este gata pentru traducere?

Nu este necesar să fie tradus din start, dar trebuie să fie ușor de tradus, astfel încât alți dezvoltatori din diferite culturi să poată participa la procesul de localizare al plugin-ului.

0
Toate răspunsurile la întrebare 2
2
45

1. Scrieți cu localizarea în minte

Nu folosiți echo sau print() pentru a afișa text, în schimb utilizați funcțiile WordPress __() și _e():

/** Nu este prietenos cu localizarea */
echo "Bun venit la pluginul meu";    
// SAU
print("Bun venit la pluginul meu");

/** Prietenos cu localizarea */
_e('Bun venit la pluginul meu', 'my-plugin');
// SAU
$my_text = __('Bun venit la pluginul meu', 'my-plugin');
echo $my_text;

_e() și __() vor furniza traducerea — în limba curentă — a textului furnizat ca prim parametru. _e() va afișa textul, în timp ce __() îl va returna.

Al doilea parametru este domeniul textului, îl veți folosi pentru a-i spune WordPress că textul furnizat ca prim parametru aparține acestui plugin, puteți folosi orice nume doriți, dar eu prefer să folosesc același nume ca cel al fișierului sau directorului pluginului, mi se pare mai intuitiv.

Cum să afișați text dinamic precum: "Salut <username>"?

Cu __() și sprintf():

/** Obține numele de utilizator */
$username = 'Magictrick';

/** Nu este prietenos cu localizarea */
echo "Salut $username";     

/** Prietenos cu localizarea */
printf(__('Salut %s', 'my-plugin'), $username);
// SAU 
$my_text = sprintf(__('Salut %s', 'my-plugin'), $username);
echo $my_text;

2. Pregătiți fișierele .pot/.po/.mo

Definiții

  • Fișierul .pot: este pus la dispoziție de dezvoltatorul pluginului și este folosit ca punct de plecare pentru a crea noi traduceri, WordPress nu îl folosește.
  • Un fișier .po: este un fișier de traducere pe care tu sau altcineva l-a început și poate l-a și finalizat, WordPress nu îl folosește.
  • Un fișier .mo: este creat automat de Poedit ori de câte ori salvezi un fișier .po, tot ce poți face cu aceste fișiere este să le încarci sau să le reîncarci ori de câte ori creezi sau actualizezi un fișier .po. WordPress obține traducerile din fișierele .mo.

Deschideți Poedit și creați un nou catalog (File › New Catallog...) cu aceste setări:

  • Informații proiect: Folosiți informațiile dumneavoastră (sau ale echipei), limba și țara ar trebui să corespundă limbii implicite a pluginului
  • Căi:
    • Cale de bază: .
    • Căi: eliminați toate și adăugați .., (vom stoca fișierul de limbă într-un subdirector al pluginului numit languages)
  • Cuvinte cheie: eliminați toate și adăugați __ și _e

Salvați catalogul ca /my_wordpress_blog/wp-content/plugins/my-plugin/languages/<strong>my-plugin.pot</strong> și scanați fișierele pluginului pentru text traducibil apăsând butonul de actualizare. Când actualizarea este finalizată, închideți acel catalog, nu va trebui să actualizați acel fișier decât dacă adăugați noi șiruri traducibile (adică încadrate în __() sau _e()) în pluginul dumneavoastră.

Acum să creăm prima traducere (voi folosi fr_FR):

Folosind Podeit, creați un catalog dintr-un fișier POT (File › New catalog from POT file...):

  • Informații proiect: Folosiți informațiile dumneavoastră (sau ale echipei), schimbați limba și țara, eu voi folosi franceză și Franța
  • Căi: Nu modificați
  • Cuvinte cheie: Nu modificați

Salvați catalogul ca /my_wordpress_blog/wp-content/plugins/my-plugin/languages/<strong>my-plugin-fr_FR.po</strong>. Traduceți unele sau toate șirurile, salvați din nou fișierul .po, încărcați atât fișierul .po cât și .mo.

Rețineți că ori de câte ori salvați un fișier .po, un fișier .mo este generat cu același nume, numele fișierului .po este crucial, este compus din concatenarea domeniului textului pluginului (my-plugin) și a localizării limbii (fr_FR), numiți întotdeauna fișierele .po pentru pluginuri astfel: [textdomain]-[locale].po, iată câteva exemple:

  • Italiană/Italia: wpcf7-it_IT.po
  • Portugheză/Brazilia: wpcf7-pt_BR.po
  • Arabă: wpcf7-ar.po... Da!

Ori de câte ori pluginul este actualizat cu text nou, actualizați fișierul po, traduceți șirurile noi și reîncărcați fișierele .po și .mo

3. Instruiți pluginul să încarce textul tradus pentru limba curentă

Undeva în pluginul dumneavoastră, trebuie să-i spuneți WordPress să folosească fișierul .mo, puteți face asta folosind acest cod la începutul fișierului pluginului:

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

Înlocuiți my-plugin cu numele pluginului dumneavoastră în primul și al treilea parametru al funcției load_plugin_textdomain.

4. Testați și depanare

Câteva motive pentru care poate să nu funcționeze:

  • Șirurile nu sunt importate în fișierul .pot sau .po
    • → Setări incorecte ale catalogului (cale sau cuvinte cheie sau ambele)
  • Textul nu este tradus pe site-ul WordPress
    • → Fișierul .mo pentru acea limbă lipsește sau are un nume incorect
    • → Domeniul textului nu este folosit (înlocuiți _e('my text') cu _e('my text', 'my-plugin'))
    • → Domeniul textului nu este încărcat (folosiți exemplul de mai sus cu parametrii corecți, WordPress nu vă va avertiza despre greșeli)
13 ian. 2013 01:03:01
Comentarii

+1 Frumoasă prezentare :) Aruncă o privire asupra acestui articol: Încărcarea fișierelor de limbă în WordPress în mod corect, "Ghiduri practice pentru a elimina dificultățile încărcării fișierelor de limbă în WordPress". :::::: Glotpress și grupul Polyglots ar putea fi de menționat de asemenea.

brasofilo brasofilo
13 ian. 2013 02:27:48

Mulțumesc pentru acest ghid util! Merită menționat că load_plugin_textdomain() trebuie apelată în fiecare metodă unde folosești _e() și __()

Andreas Andreas
8 mai 2013 08:40:52
3

Răspunsul lui Nabil este destul de complet, dar există o variație ușoară disponibilă:

  1. Plugin-ul tău este înregistrat în depozitul de plugin-uri WordPress.org

  2. Ești dispus să ceri ca plugin-ul tău să funcționeze doar cu WordPress 4.6 sau versiuni mai recente.

Pașii sunt următorii:

  1. În fișierul readme.txt al plugin-ului tău, adaugă Requires at least: 4.6. Vezi https://developer.wordpress.org/plugins/wordpress-org/how-your-readme-txt-works/

  2. Dacă nu este deja, încarcă plugin-ul tău în depozitul de plugin-uri WordPress. Vezi https://wordpress.org/plugins/developers/add/.

  3. Găsește slug-ul/domeniul textului plugin-ului tău. Pentru a face asta, mergi la pagina plugin-ului tău pe depozitul de plugin-uri WordPress. URL-ul va arăta ca https://wordpress.org/plugins/your-plugin-slug/. Ultima parte a URL-ului, „your-plugin-slug”, este slug-ul plugin-ului tău. Acesta este ceea ce vei folosi pentru domeniul text al funcțiilor de traducere.

  4. Folosește funcțiile de traducere WordPress în plugin-ul tău (cum ar fi __e(‘hello’, ‘my-plugin-domain’);). Doar asigură-te că folosești domeniul text corect al plugin-ului, obținut în pasul anterior. Vezi https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/ pentru mai multe informații.

Dacă urmezi pașii de mai sus, WordPress se va ocupa de:

  • Analizarea plugin-ului tău pentru toate șirurile de text traductibile (nu este nevoie să instalezi și să rulezi Poedit sau altceva)
  • Facilitarea contribuirii oricui la traducerile plugin-ului tău pe translate.wordpress.org (nu este nevoie să ai propriul site dedicat traducerii plugin-ului sau un proces personalizat pentru ca traducătorii să-ți trimită traducerile)
  • Când cineva folosește plugin-ul tău, WordPress va verifica dacă este tradus în limba lor și, dacă da, îl va afișa în limba lor (nu este nevoie ca ei sau tu să încarci fișierele de traducere pe site-ul lor)

(Răspuns de pe postarea mea de blog aici: https://cmljnelson.blog/2019/01/01/the-really-lazy-way-to-translate-a-wordpress-plugin/)

6 ian. 2019 04:26:03
Comentarii

Nu sunt sigur de ce a fost votat în jos. Este exact ceea ce am făcut pentru a pregăti https://wordpress.org/plugins/print-my-blog/ pentru traducere (iar plugin-ul a fost tradus cu succes)

thespacecamel thespacecamel
25 mar. 2019 03:21:16

Înseamnă asta că dacă un plugin/temă nu se află în depozitul de plugin-uri WordPress, dar folosește domeniul de text al unui plugin care este acolo, WordPress ar încărca fișierele de traducere greșite?

bodo bodo
14 apr. 2019 12:40:01

Bună întrebare @bodo. Dacă un plugin indică să utilizeze domeniul de text al altui plugin care se află în depozitul wp.org, cred că WordPress va folosi cu plăcere fișierele de traducere ale acelui plugin de pe wp.org. Dar îmi pare rău, nu sunt sigur.

thespacecamel thespacecamel
24 apr. 2019 01:51:15