Cum să vă internaționalizați site-ul WordPress

Publicat: 2022-03-10
Rezumat rapid ↬ WordPress este în prezent complet localizat pentru peste 65 de limbi și oferă traduceri parțiale pentru încă 95 de limbi. Dacă nu ți-ai internaționalizat încă site-ul WordPress, probabil că este timpul să o faci.

Pe 30 septembrie 2017, comunitatea internațională WordPress s-a unit timp de 24 de ore pentru a traduce ecosistemul WordPress. Pentru a treia oară, #WPTranslationDay a combinat un maraton de traducere de o zi întreagă cu evenimente digitale și de ziua colaboratorilor menite să promoveze valoarea creării de experiențe accesibile pentru utilizatorii globali, mai bine cunoscută sub numele de „localizare”.

Ca comunitate open-source, cu toții ar trebui să ne străduim să ne localizăm contribuțiile open-source. Totuși, înainte de a vă putea transcrie activele digitale, trebuie să vă internaționalizați baza de cod.

Termenii „internaționalizare” și „localizare” sunt adesea folosiți interschimbabil, deși din punct de vedere tehnic reprezintă două aspecte diferite ale procesului de traducere.

  • Internaționalizarea (I18N) este procesul de internaționalizare sau de adaptare a temei sau a pluginului pentru a-l traduce în orice limbă din lume.
  • Localizarea (L10N) este procesul ulterior de localizare sau traducere a instrumentelor dumneavoastră internaționalizate într-o anumită limbă.

WordPress este în prezent complet localizat pentru peste 65 de limbi și oferă traduceri parțiale pentru încă 95 de limbi. Utilizarea internațională continuă să crească pe măsură ce sunt introduse mai multe localizări.

Statistici de la WordPress.org
Statistici de la WordPress.org (previzualizare mare)
Mai multe după săritură! Continuați să citiți mai jos ↓

Utilizatorii WordPress care nu vorbesc engleza i-au depășit pe cei vorbitori de engleză în 2014 și, din neatenție, continuă să dilueze procentul de plăcintă al utilizatorilor englezi în 2017, pe măsură ce eforturi precum #WPTranslateDay cresc.

Pe măsură ce WordPress devine din ce în ce mai accesibil din punct de vedere lingvistic, cunoștințele despre I18N și L10N sunt esențiale pentru ca dezvoltatorii de pluginuri și teme să prospere în economia globală WordPress. Pentru extinderea afacerilor, aceste abilități de dezvoltare pot deschide porți către piețele externe. Accesibilitatea web, inclusiv accesibilitatea limbilor, este bună pentru afaceri și mai bună pentru oameni.

Ca o continuare a #WPTranslationDay , iată un ghid actualizat pentru internaționalizarea pluginurilor și temelor dvs. WordPress.

Iată o scurtă prezentare generală a procesului pe care îl vom explora astăzi.

  • Descoperire
    • Faceți cunoștință cu fișierele de traducere
      • Fișier POT
      • Fișier PO
      • Fișier MO
    • GlotPress și pachete de limbă
    • Faceți backup și pregătiți-vă mediul
  • Plugin I18N
    • Antet plugin
    • Încărcați domeniul text
    • Auditul șirurilor
    • Generați fișierul POT
  • Tema I18N
    • Antetul temei
    • Încărcați domeniul text
    • Auditul șirurilor
    • Generați fișierul POT
  • JavaScript I18N
  • Resurse aditionale

Descoperire

Faceți cunoștință cu fișierele de traducere

WordPress folosește biblioteca GNU gettext pentru a facilita I18N.

Mai întâi, să ne familiarizăm cu fișierele de traducere gettext generate pe parcursul procesului.

Fișier șablon pentru obiecte portabile (POT)

În timpul procesului I18N, vom folosi un instrument pentru a găsi șiruri internaționalizate și pentru a genera un fișier POT care să conțină tot textul translabil din pluginurile și tema dvs.

Fișier obiect portabil (PO)

În aparență, nu există diferențe remarcabile între un fișier POT și un fișier PO . Sunt aceleași din punct de vedere sintactic și sunt diferențiate doar prin scopurile propuse.

După generarea unui fișier POT, șirurile de text ar trebui să fie interpretate de un traducător în limba preferată. Fișierul PO va conține în cele din urmă șiruri de text în limba ta maternă, precum și traducerile corespunzătoare.

Fișier obiect mașină (MO)

În cele din urmă, fișierul PO este convertit într-un document care poate fi citit de mașină sau într-un fișier Machine Object. Acest fișier va locui în directorul dvs. de teme sau de pluginuri pentru ca WordPress să îl apeleze când este timpul să difuzeze o versiune tradusă.

Faceți backup și pregătiți-vă mediul

Înainte de a modifica orice marcaj, faceți o copie de rezervă a pluginului, a temei sau a întregului site (indiferent de ce ați internaționaliza!) și puneți-vă în ordine mediile de dezvoltare.

Asigurați-vă că efectuați un audit rapid al pluginului dacă intenționați să vă localizați site-ul. Ștergeți sau dezactivați orice plugin pe care nu le mai utilizați în mod activ. Acest audit rapid vă va economisi timp pe termen lung.

Internaționalizați-vă pluginurile

PLUGIN HEADER

Mai întâi, vom actualiza antetul pluginului. Mai exact, domeniul text și calea domeniului .

Exemplu de antet de plugin

 /* Plugin Name: My Rad Plugin Plugin URI: https://myradplugin.com Description: Custom Plugin That Makes My Site Rad Author: Rad Plugin Creator Version: 1.0 Author URI: https://radplugincreator.com Text Domain: rad-plugin Domain Path: /languages/ */

Domeniul text

Domeniul text este un identificator unic pentru WordPress pentru a recunoaște tot textul aparținând unui plugin și trebuie să se potrivească cu slug-ul pluginului .

Acest lucru este deosebit de important dacă pluginul dvs. este găzduit pe WordPress.org; acestea trebuie să se potrivească pentru ca GlotPress să importe corect traduceri pentru pluginul tău.

În exemplul nostru, fișierul plugin se numește rad-plugin.php și domeniul text este rad-plugin

Este posibil să aveți deja un domeniu de text setat. Dacă nu, nu uitați să folosiți cratime, nu liniuțe de subliniere.

Calea domeniului

Calea domeniului este folderul în care vor locui fișierele de traducere finalizate. Ar trebui să creați un folder nou în directorul pluginului, cum ar fi /languages/ și să actualizați calea domeniului, astfel încât WordPress să știe exact unde să caute fișierele de traducere.

ÎNCĂRCĂ DOMENIU DE TEXT

În continuare, vom încărca domeniul text adăugând următoarea funcție la codul nostru.

load_plugin_textdomain()

 load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path );

Dacă un fișier de traducere este disponibil pentru limba utilizatorului, funcția de încărcare a domeniului text va spune WordPress să-l livreze.

Parametrii

  • $domain — domeniu text (obligatoriu)
  • $abs_rel_path — false (opțional, depreciat)
  • $plugin_rel_path — /languages/ (opțional, aceasta este calea relativă către directorul care conține fișierele dvs. de traducere. În exemplul nostru, /languages/. Începând cu 4.6, WordPress va căuta aceste fișiere în directorul /languages/ al pluginului, dacă acest lucru rămâne nespecificat.)

Exemplu de plugin Rad

Pentru a încărca domeniul text, ne vom conecta la acțiunea „plugins_loaded”.

 add_action( 'plugins_loaded', 'rad_plugin_load_text_domain' ); function rad_plugin_load_text_domain() { load_plugin_textdomain( 'rad-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); }

STRINGS AUDIT

Următorul pas este să împachetați toate șirurile de text ale pluginului în funcțiile de traducere.

Cele mai obișnuite funcții de traducere sunt __() pentru returnarea unui șir tradus și _e() pentru ecoul unui șir tradus.

Exemplu de plugin Rad

 __() $text = __( 'Super Rad!', 'rad-plugin' );

Această funcție va funcționa pentru traduceri simple. Ia în considerare doi parametri; șirul de text și domeniul text .

 _e( 'Super Rad!', 'rad-plugin' );

Această funcție pur și simplu ecou valoarea. În caz contrar, funcționează exact ca și funcția anterioară.

Există o mulțime de funcții de traducere suplimentare care ar trebui folosite și atunci când este cazul.

Alte funcții de bază

 __() _e() _x() _ex() _n() _nx() _n_noop() _nx_noop() translate_nooped_plural()

Funcții de dată și număr

 number_format_i18n() date_i18n()

Funcții de evacuare

Nu uitați să scăpați de orice date care sunt ieșite folosind următoarele funcții de evacuare.

 esc_html__() esc_html__() esc_html_x() esc_attr__() esc_attr_e() esc_attr_x()

În exemplul nostru Rad, este posibil să avem o linie de cod de plugin care arată astfel:

 function create_section() { esc_html_e( 'Below are your settings for Rad Plugin', 'rad-plugin' ); }

CREAȚI UN FIȘIER POT

Pasul final este crearea unui fișier POT. Există câteva instrumente diferite disponibile pentru a genera acest tip de fișier, dar pentru acest tutorial, ne vom ține de recomandările din codexul WordPress și vom folosi Poedit, o GUI ușor de utilizat pentru gestionarea traducerilor.

Notă : Dacă pluginul sau tema dvs. se află deja în depozitul WordPress.org, puteți sări peste acest proces și să generați un fișier POT din pagina de administrare. În acest caz, nu este necesar să generați un fișier .po pentru fiecare limbă. Introducerea GlotPress și a pachetelor lingvistice în 2015 a simplificat procesul de traducere; tot ceea ce este necesar pentru GlotPress este fișierul .pot, care va fi importat de WordPress.org și oferit traducătorilor prin intermediul tabloului de bord translate.wordpress.org. Colaboratori din întreaga lume vor folosi acest tablou de bord pentru a oferi traduceri în #WPTranslateDay.

Descărcați Poedit

Configurarea Poedit

Proprietăți de traducere

Începeți prin a accesa Fișier > Nou . Apoi selectați limba maternă a pluginului și apăsați OK .

Previzualizare mare

Apoi, selectați Catalog > Nou . Introduceți numele proiectului, versiunea, contactul și limba.

Previzualizare mare

Cărări

Selectați fila Căi surse în continuare. Dacă acesta este un fișier nou, mai întâi va trebui să salvați fișierul.

Urmând exemplul nostru, am selecta File > Save As pentru a salva ca fișier .po în directorul /languages/ din interiorul rad-plugin. Din nou, numele fișierului ar trebui să se potrivească cu slug-ul pluginului dvs.

 rad-plugin.po

După salvare, introduceți calea relativă către directorul în care vor locui fișierele dvs. de traducere. În acest scenariu, limbi .

Previzualizare mare

Cuvinte cheie

Selectați fila Cuvinte cheie surse . Faceți clic pe pictograma + pentru a adăuga numele funcțiilor corespunzătoare.

Previzualizare mare

Cheatsheet

 __ _e _x _ex _n _nx _n_noop _nx_noop translate_nooped_plural number_format_i18n date_i18n esc_html__ esc_html__ esc_html_x esc_attr__ esc_attr_e esc_attr_x

După aceea, puteți face clic pe OK și apoi pe Fișier > Salvare .

Poedit va salva atât un fișier .mo, cât și un fișier .po. Puteți crea fișierul .pot prin copierea fișierului .po și adăugând o extensie .pot. Utilizatorii internaționali pot folosi fișierul șablon .pot pentru a traduce șirurile în limba lor.

Internaționalizați-vă tema

Procesul de internaționalizare a temei este practic identic cu I18N pentru pluginuri. Vom începe prin a verifica antetul temei și vom încheia prin a genera un alt fișier POT.

ANTET TEMA

Verificați de două ori antetul temei pentru a vă asigura că domeniul text și calea domeniului sunt setate.

Exemplu de antet de temă

 /* Theme Name: Rad Theme Author: Rad Theme Author Text Domain: rad-theme Domain Path: /languages/ */

ÎNCĂRCĂ DOMENIU DE TEXT

Următorul pas este încărcarea unui domeniu text în fișierul functions.php al temei dvs. de data aceasta.

load_theme_textdomain()

 load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' );

Pentru ca aceste fișiere să se încarce, trebuie să le înregistrați cu acțiunea after_setup_theme.

 add_action( 'after_setup_theme', 'rad_theme_setup' ); function rad_theme_setup() { load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' ); }

STRINGS AUDIT

E timpul pentru un alt audit de șiruri! În acest moment, ar trebui să fiți familiarizați cu funcțiile de bază de traducere.

Să aruncăm o privire asupra unor traduceri mai complicate.

Substituenți

Variabilele PHP precum exemplul de mai jos nu vor fi traduse corect fără utilizarea substituenților.

 echo "We added $count rad points.";

printf() și sprintf()

Aceste funcții folosesc substituenți precum %s sau %d pentru numere întregi, pentru a interpola un șir de text cu conținut dinamic.

Exemplu de temă Rad

 /* Translators: %d is the number of rad points added */ printf( esc_html__( 'We added %d rad points.', 'rad-plugin' ), $count );

Pluralele

Funcția _n() poate gestiona traduceri de șiruri mai complexe, cum ar fi pluralele, dar nu este recomandată din cauza limitărilor sale în software-ul de traducere. În schimb, puteți scrie o declarație simplă if pentru a distinge cuvintele la singular și la plural.

Exemplu de plugin Rad

 If ( 1 === $rad_points_found ) { $message = __( '1 rad point', 'rad-plugin' ); } else { /* Translators: %s is the number of rad points found */ $message = sprintf( __( '%s rad points' , 'rad-plugin' ) , $rad_points_found ); }

GENERATE FIȘIER POT

Procesul de generare a fișierelor POT cu tema este același cu generarea fișierelor POT de plugin. Explorați câteva metode de mai jos.

Linie de comanda

Cu WordPress Trunk și pachetul gettext GNU instalate, puteți trece rapid prin acest pas rulând scriptul makepot.php în linia de comandă.

Deschideți linia de comandă și navigați la directorul de instrumente I18N.

 cd wpdev/tools/i18n/

Scriptul ar trebui să arate cam așa:

 php path/to/makepot.php wp-theme path/to/rad-theme rad-theme.pot

Scriptul își va face treaba și fișierul terminat, rad-theme.pot , va ajunge în directorul curent.

Sarcini Grunt

O altă metodă pentru a crea un fișier POT este să rulați sarcini Grunt folosind fie grunt-wp-i18n, fie grunt-pot. Operatorii de sarcini precum Grunt pot automatiza o mulțime de sarcini obositoare, cum ar fi generarea de fișiere POT.

Pentru a crea fișierul POT, asigurați-vă că aveți instalat mai întâi node.js. Apoi, instalați Grunt în directorul de limbă prin linia de comandă și plecați. Acum, puteți rula rapid aceste comenzi I18N și puteți crea fișierul de traducere fără a părăsi confortul liniei de comandă.

JavaScript I18N

Dacă sunteți un dezvoltator modern de teme sau de plugin, sunt șanse să utilizați JavaScript pentru a gestiona o componentă a proiectului dvs. wp_localize_script este o funcție eficientă pentru extragerea datelor PHP pentru a le furniza scripturilor dvs. și este singura modalitate de a traduce JavaScript în interiorul WordPress.

WP_LOCALIZE_SCRIPT()

Această funcție ne va permite să localizăm șiruri de caractere pe partea serverului în PHP și să furnizăm șiruri de text ca obiect JavaScript pentru script.

 wp_localize_script( $handle, $name, $data );

PARAMETRI

  • $handle - script-ul pentru care datele trebuie să fie disponibile (obligatoriu - trebuie să se potrivească cu script-ul pentru care sunt date aceste date, vezi exemplul de mai jos)
  • $nume — numele obiectului care conține datele (obligatoriu — ar trebui să fie unic)
  • $data — o serie de date de transmis scriptului (obligatoriu) .

EXEMPLU DE PLUGIN RAD

 add_action( 'wp_enqueue_scripts', 'rad_theme_scripts' ); function rad_theme_scripts() { wp_enqueue_script( 'rad-theme-script', get_template_directory_url() . '/js/rad-theme-script.js' ); wp_localize_script( 'rad-theme-script', 'rad-I18n', array( 'message' => __( 'Super Rad!', 'rad-theme' ), ) ); }

DATELE DE ACCES ÎN JAVASCRIPT

Fragmentul de cod simplu de mai jos este un exemplu despre cum să accesați aceste date în fișierul JavaScript.

 alert( rad-I18n.message );

Resurse aditionale

  • I18N pentru dezvoltatori WordPress
  • Manual de teme WordPress: Internaționalizare
  • Manual pentru pluginuri WordPress: internaționalizare
  • WordPress.tv: I18N

Încheierea

Felicitări! Tocmai ți-ai internaționalizat tema și/sau pluginul, făcându-l accesibil pentru ca oamenii din toate limbile materne să beneficieze. Indiferent dacă proiectul dvs. este distribuit prin depozitul WordPress sau dezvoltat personalizat pentru site-ul web al organizației dvs., există doar un avantaj în internaționalizarea fișierelor de la început.

  • Faceți contribuțiile dvs. open-source accesibile la nivel global.
  • Creați conversații cu clienți noi de pe piețele externe.
  • Economisiți timp și reduceți actualizările laborioase în viitor.

Internaționalizați-vă întotdeauna.