Come internazionalizzare temi e plugin di WordPress

In 5 Cardinal Sins of WordPress Theme Development, abbiamo brevemente parlato dell'importanza dell'internazionalizzazione di temi e plugin, ma in realtà non abbiamo discusso Come per farlo. 

Se ti trovi nel tema commerciale o nello spazio del plug-in, è quasi scontato che il tuo lavoro supporterà più lingue. In questo articolo, daremo un'occhiata a capire cos'è realmente l'internazionalizzazione, perché è importante e quali passaggi sono necessari per internazionalizzare il tuo progetto.


Comprensione dell'internazionalizzazione

Quando si tratta di internazionalizzare i progetti WordPress, forse l'aspetto più difficile è in realtà capire come farlo - internazionalizzare un progetto WordPress è davvero molto facile da fare.

Prima di guardare come si fa, è importante dare un'occhiata al significato dell'internazionalizzazione e perché noi, come sviluppatori, dovremmo anche preoccuparci di farlo.

Internazionalizzazione definita

In poche parole, l'internazionalizzazione è il processo attraverso il quale prepariamo il nostro tema per la traduzione. Ciò significa che indipendentemente dalla lingua utilizzata per lo sviluppo del nostro lavoro, i futuri utenti (o anche gli sviluppatori) possono facilmente tradurre il progetto per qualsiasi lingua richiesta. L'internazionalizzazione in realtà non richiede questo noi fornire le traduzioni (anche se il multilingua tra noi potrebbe facilmente farlo), solo che adottiamo i passi necessari affinché i futuri traduttori lo facciano.

Perché preoccuparsi?

Anni fa avrei detto che l'internazionalizzazione dovrebbe essere fatta solo se il mercato di riferimento per il tuo lavoro era diverso dalla tua lingua madre, ma non è più così. Grazie a Internet, siamo in grado di conversare, collaborare, e comunicare con persone provenienti da tutto il mondo. Il pubblico potenziale per ogni dato progetto è più ampio di quanto lo sia mai stato prima.

A maggior ragione, WordPress alimenta un numero significativo di siti Web moderni. A tal fine, dovremmo pensare globalmente al nostro lavoro. Ritengo che l'internazionalizzazione di temi commerciali o plug-in non sia più negoziabile. Se la piattaforma su cui è costruito il tuo lavoro è utilizzata da una varietà di linguaggi - e WordPress lo è - e detta piattaforma fornisce un modo semplice e pulito di internazionalizzare un tema - e WordPress lo fa - allora è più una questione di perché io sono non internazionalizzare il mio lavoro.

Come internazionalizzare

Come accennato in precedenza, l'internazionalizzazione di un tema è più di uno sforzo per comprendere le funzioni chiave dell'API di WordPress che il processo effettivo di preparazione del testo. Quindi, prima di dare un'occhiata ad un esempio concreto, definiamo alcuni termini e funzioni importanti: - Chiave di internazionalizzazione. Puoi pensare a questo come contesto, dominio o identificativo univoco per le tue stringhe.

Indipendentemente da ciò, questo è un valore unico e unico che WordPress utilizzerà per internazionalizzare il testo in tutto il tema. __ ($ text, $ key) è una funzione che restituisce una stringa tradotta. Questa funzione non riproduce, stampa o visualizza la stringa. Viene spesso utilizzato quando è necessario eseguire un'altra operazione sulla stringa tradotta (ad esempio trasferirla in un'altra funzione). Accetta due argomenti: la stringa da tradurre e la chiave di internazionalizzazione.- _e ($ text, $ key) è una funzione che effettivamente fa eco alla stringa tradotta.

Si usa al meglio quando è necessario recuperare un valore tradotto e visualizzarlo da qualche parte nel tema o plug-in. Load_theme_textdomain ($ domain, $ translation_directory), load_plugin_textdomain ($ domain, $ translation_directory) sono due funzioni che indicano a WordPress dove individuare il proprio traduzioni. Daremo un'occhiata a queste funzioni un po 'più in dettaglio per un momento.

Per ora, sappi solo che ogni funzione ha lo stesso scopo anche se si tratta di temi, uno è per i plugin. Per la maggior parte, questo è tutto quello che c'è da capire come internazionalizzare il tuo tema. Da qui, daremo un'occhiata esattamente a ciò che è implicato nel mettere in pratica queste funzioni.


Internazionalizzare il tuo lavoro

Visualizzazione del testo tradotto

Prima di internazionalizzare un tema, diamo un'occhiata a come appare un pezzo standard di markup:

Il mio blog WordPress

Solo uno dei migliori siti su Internet

Questo paragrafo è solo il miglior paragrafo esistente in tutti i blog WordPress su Internet. Leggilo e divertiti.

Niente di spettacolare, giusto? Sembra un pezzo standard di HTML (che è tutto ciò che è). Certo, questo è un semplice esempio, ma è tutto ciò che serve per dimostrare come internazionalizzare un tema.

Per internazionalizzare questo testo sopra, abbiamo bisogno di determinare quale identificatore univoco che useremo per internazionalizzare il nostro testo - Ho intenzione di andare con "tutsplus". In secondo luogo, visto che tutto il testo sopra è visualizzato sullo schermo, useremo la funzione __e (). Il codice internazionalizzato dovrebbe essere:

Ma che dire del testo che deve essere tradotto prima di essere visualizzato sullo schermo? Non è molto diverso ma diamo un'occhiata a come possiamo internazionalizzare le barre laterali.

Elaborazione del testo tradotto

Per prima cosa, impostiamo la barra laterale:

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

Per riferimento, sto usando la funzione register_sidebar disponibile tramite l'API di WordPress. Si noti che il nome della barra laterale viene visualizzato nella schermata Widget. Come tale, abbiamo bisogno di internazionalizzarlo; tuttavia, un array non accetta una stringa echoed - accetta un valore stringa.

In questo caso, trarremo vantaggio dalla funzione __ ():

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

Abbastanza facile, eh?

Ricorda, l'internazionalizzazione dovrebbe applicarsi solo al testo statico. Non è responsabilità dello sviluppatore fornire internazionalizzazione dei contenuti della pagina, pubblicare contenuti e così via.


Preparare il tema e / o il plugin per l'internazionalizzazione

Dopo aver esaminato il tuo tema e aver indirizzato correttamente il testo che deve essere internazionalizzato, devi dire al tema o al plug-in dove trovare i file di internazionalizzazione. Daremo un'occhiata a questo in modo più approfondito in un momento, ma prima di tutto raccomando sempre di creare una directory "lang" nella radice della directory del tema o del plugin per archiviare i file di internazionalizzazione.

Ricorda le funzioni load_theme_text_domain e load_plugin_text_domain delle funzioni precedenti? Questo è dove li usiamo. Se stai lavorando con un tema, dovremo definire una funzione personalizzata chiamata nel hook after_setup_theme:

function custom_theme_setup ()  // end custom_theme_setup add_action ('after_setup_theme', 'custom_theme_setup');

Successivamente, diremo alla funzione dove individuare le traduzioni. Per fare ciò, aggiungi quanto segue alle linee del tuo tema (nota i commenti che spiegano cosa fa ogni linea):

function custom_theme_setup () // Recupera la directory per i file di internazionalizzazione $ lang_dir = get_template_directory (). '/ Lang'); // Imposta il dominio del testo del tema usando l'identificativo univoco di cui sopra load_theme_textdomain ('tutsplus', $ lang_dir);  // end custom_theme_setup add_action ('after_setup_theme', 'custom_theme_setup');

Relativamente semplice, giusto? Non è molto diverso anche per i plugin. Simile ai temi, inserisco sempre i miei file di internazionalizzazione dei plugin in una sottodirectory "lang". Innanzitutto, dobbiamo dire a WordPress dove si trovano i file di internazionalizzazione. Supponendo che il tuo si trovi in ​​una directory "lang":

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

Il secondo parametro - dove abbiamo specificato 'false' - è necessario ma corrisponde a una funzione deprecata in WordPress.

Infine, dobbiamo determinare dove chiamare la funzione load_plugin_textdomain. Se stiamo scrivendo un Widget, in genere inserisco questa funzione nel costruttore:

class My_Custom_Widget function My_Custom_Widget () load_plugin_textdomain ('tutsplus', false, dirname (plugin_basename (__ FILE__)). '/ lang /');  // end constructor // end My_Custom_Widget

Se stiamo scrivendo un plug-in di vaniglia, ci sono vari modi in cui puoi dire a WordPress dove si trovano i file di traduzione, ma hai la flessibilità di collegarti after_setup_theme funzione. Simile al codice del tema qui sopra, puoi inserirlo nel tuo plugin:

function custom_plugin_setup () load_plugin_textdomain ('tutsplus', false, dirname (plugin_basename (__ FILE__)). '/ lang /');  // end custom_theme_setup add_action ('after_setup_theme', 'custom_plugin_setup');

A questo punto, il tema o il plugin sono pronti per l'internazionalizzazione.


Altre due considerazioni

A questo punto, hai effettivamente finito, ma vale sempre la pena sapere cosa è richiesto per prendere il tuo lavoro e andare avanti. Ecco i due compiti in sospeso che i traduttori normalmente eseguiranno per tradurre il tuo tema

  • Tradurre il testo. I traduttori elaboreranno il tuo tema attraverso un'applicazione di traduzione (come POEdit) che genererà i file che sono memorizzati nella tua directory 'lang' che è dove WordPress recupererà i file.
  • Aggiornamenti a WP-Config.php. A questo punto, i traduttori dovranno istruire WordPress per abilitare l'internazionalizzazione e specificare quale lingua stanno utilizzando. Questo va oltre lo scopo di questo articolo, ma puoi leggere di più su questo nel Codex.

In contrasto con alcuni degli altri ambienti di sviluppo disponibili, WordPress rende incredibilmente facile internazionalizzare il tuo lavoro. Probabilmente, la parte più difficile è capire le funzioni chiave necessarie per preparare le stringhe per l'internazionalizzazione.

Inoltre, il refactoring del lavoro esistente può sempre essere un processo che richiede tempo. Nel contesto di WordPress, può essere noioso ma è relativamente facile da fare. Se hai ulteriori suggerimenti o domande riguardanti l'internazionalizzazione, sentiti libero di lasciarli nei commenti!