O parte importană în dezvoltarea temelor și pluginurilor WordPress de către o firmă de web design o reprezintă pregătirea lor pentru ca orice utilizator din lume să le poată folosi. Acest articol explică procesul de internaționalizare a unei teme și a unui plugin WordPress.

Dacă se dorește schimbarea limbii principale a site-ului, aceasta se poate face prin definirea ei în fișierul wp-config.php care se găsește în directorul principal al instalării WordPress. Aceasta se face prin definirea constantei WPLANG în felul următor: define (‘WPLANG’, ‘ro_RO’); pentru limba română, sau define (‘WPLANG’, ‘en_US’); pentru engleză, etc.

 

Inițializarea

Primul pas în internaționalizarea unei teme WordPress este încărcarea unui domeniu text. Aceasta se face prin adăugarea următoarei funcții în fișierul functions.php al temei dvs.
[cc lang=”php”]add_action(‘after_setup_theme’, ‘setarea_temei_mele’);
function setarea_temei_mele() {
load_theme_textdomain(‘tema_mea’, get_template_directory() . ‘/languages’);
}[/cc]
Această funcție este apelată de fiecare dată când o pagină a site-ului este încărcată, după ce tema a fost inițializată (after_setup_theme). Practic încarcă domeniul text potrivit paginii cerute (load_theme_textdomain), adică se va uita în folderul “/languages” din directorul temei curente (get_template_directory()) și dacă va găsi acolo un fișier .mo care are același nume cu cel ce a fost definit în fișierul wp-config.php ca limba principală, va încărca acel fișier. (exemplu: ro_RO.mo)

Primul pas în internaționalizarea unui plugin WordPress este tot încărcarea unui domeniu text într-un mod asemănător cu modul de încărcare a unui domeniu text pentru o temă. De această dată însă, se folosește funcțiaload_plugin_textdomain().
[cc lang=”php”] add_action( ‘plugins_loaded’, ‘initializarea_pluginului_meu’ );
function initializarea_pluginului_meu() {
load_plugin_textdomain( ‘pluginul_meu’, false, dirname( plugin_basename( __FILE__ ) ) . ‘/languages/’);
}[/cc]
După cum spune și numele, aceasta funcție va încărca domeniul text al pluginului (load_plugin_text_domain) după ce pluginurile au fost inițializate (plugins_loaded). Practic, va căuta un fișier .mo în folderul “/languages/” din directorul pluginului curent (plugin_basename( __FILE__)).

 

Procesarea textelor

După ce a fost încărcat un domeniu text în temă sau pluginul curent, procesarea textelor se poate face prin câteva funcții dedicate. Cele mai folosite funcții sunt _e(‘text’) si __(‘text’). Acestea caută traducerea textului din paranteză și dacă nu o gasește, va folosi exact textul din paranteză. Diferența dintre cele 2 funcții este că _e() va printa/afisa imediat textul corespunzător (ca functia echo()) pe când funcția __() doar va întoarce valoarea pentru a fi folosită mai târziu.

De exemplu, echo(‘Hello’); va trebui convertită în _e(‘Hello’,’tema_mea’);the_content(‘Read more’); va trebui convertită în the_content(__(‘Read more’, ‘tema_mea’)); și așa mai departe.

Uneori un mesaj include date dinamice sau calcule. În acest caz, vom folosi funcția php sprintf():
[cc lang=”php”] $rezultate = 14;
$mesaj = sprintf( __(‘%s results found’, ‘tema_mea’), $rezultate );[/cc]
Practic, în locul caracterelor %s va fi afișat numărul de rezultate. În cazul nostru, 14.

WordPress oferă și funcții pentru traducerea textelor care au mai multe forme posibile (singular, plural). Funcția următoare va căuta traducerea pentru textele “comment approved” și “comments approved” și va întoarce valoarea singulară sau plurală în funcție de numărul de comentarii aprobate.
[cc lang=”php”] if ( $aprobate > 0 )
$comentarii = sprintf( _n( ‘%s comment approved’, ‘%s comments approved’, $aprobate ), $aprobate, ‘tema_mea’ );
else
$comentarii = __(‘No comments yet.’, ‘tema_mea’);
echo $comantarii;[/cc]
Alternativ, se poate folosi următoarea funcție:
[cc lang=’php’] _e(‘This post has’,’tema_mea’);
comments_number( __(‘no comments’,’tema_mea’), __(‘one comment’,’tema_mea’), __(‘% comments’,’tema_mea’) );[/cc]

 

Includerea contextului

Se va intampla uneori sa existe coliziuni cu texte care se traduc asemănător în mai multe locuri dar au sensuri diferite. Pentru a putea ajuta ulterior persoana care va face traducerile, se va folosi funcția _x() care oferă și informații despre contextul textului de tradus.
[cc lang=”php”] // In the content
echo _x( ‘apparent’, ‘in_content’, ‘tema_mea’ );
// In the sidebar
echo _x( ‘apparent’, ‘in_sidebar’, ‘tema_mea’ );[/cc]

 

Internaționalizarea fișierelor Javascript

Fisierele .js pot fi internaționalizate folosind funcția WordPress wp_localize_script() în modul următor:
[cc lang=”php”] // In php
wp_enqueue_script( ‘nume-fisier-js’, … );
wp_localize_script( ‘nume-fisier-js’, ‘objectL10n’, array(
‘speed’ => $distance / $time,
‘submit’ => __( ‘Submit’, ‘my-plugin-domain’ ),
) );

// In js
$(‘#submit’).val(objectL10n.submit);
$(‘#speed’).val(‘{speed} km/h’.replace(‘{speed}’, objectL10n.speed));[/cc]
Ulterior, pentru traducerea textelor internaționalizate se poate folosi programul Poedit. Va trebui să generați un fișier .po (vezi Creating POT Files), după care veți putea efectua traducerile și salva fisiere gen ro_RO.mo pe care WordPress le va folosi pentru a genera traducerile.

Leave a comment

Your email address will not be published. Required fields are marked *

Send this to a friend