Internazionalizzazione di WordPress: come tradurre temi e plugin di WordPress

Scopri tutti i passaggi per internazionalizzare il tuo tema o plugin WordPress in modo che sia pronto per essere tradotto in qualsiasi lingua.

Questa guida è rivolta agli sviluppatori che scrivono il codice. Se hai già un file POT o PO e devi solo tradurlo, puoi farlo in 3 semplici passaggi con PTC.

Cos’è l’internazionalizzazione di WordPress?

L’internazionalizzazione (i18n) è il processo di preparazione del codice affinché possa essere tradotto. Non è il processo di traduzione vero e proprio. La localizzazione (l10n) è il passaggio successivo, in cui le stringhe vengono effettivamente tradotte in lingue specifiche.

Per i temi e i plugin di WordPress, i18n significa:

  • Racchiudere tutte le stringhe rivolte all’utente nelle funzioni gettext, in modo che WordPress possa sostituirle
  • Definire un text domain che colleghi le tue traduzioni al tuo progetto
  • Generare un file POT su cui i traduttori (o PTC) possano lavorare

Una volta fatto questo, avrai tutto il necessario per produrre file PO, MO e JSON tradotti per qualsiasi lingua.

Preparare il tuo tema o plugin WordPress per la traduzione

Prima di poter tradurre qualsiasi cosa, devi impostare correttamente il tuo codice. Ciò significa definire un text domain, racchiudere tutte le stringhe rivolte all’utente nelle funzioni gettext e generare un file POT.

Nulla di tutto ciò è complicato, ma i dettagli contano. Un text domain errato o una stringa non racchiusa significano che quel testo non apparirà mai nel tuo output tradotto.

Passaggio 1

Definisci il tuo Text Domain e il Domain Path

Ogni tema o plugin ha bisogno di un text domain. È un identificatore unico che dice a WordPress quali file di traduzione appartengono al tuo progetto e dovrebbe corrispondere esattamente allo slug del tuo plugin o tema.

Dichiaralo nell’intestazione del file principale del tuo plugin:

/**
 * Plugin Name: My Plugin
 * Text Domain: my-plugin
 * Domain Path: /languages
 */

Oppure nel tuo tema style.css:

/*
Theme Name: My Theme
Text Domain: my-theme
Domain Path: /languages
*/

Il domain path dice a WordPress dove si trovano i tuoi file di traduzione rispetto alla root del plugin o del tema. La directory /languages è lo standard.

Passaggio 2

Racchiudi le tue stringhe PHP nelle funzioni Gettext

Qualsiasi stringa che vuoi rendere traducibile deve essere racchiusa in una delle funzioni gettext di WordPress. In fase di esecuzione, queste funzioni cercano la traduzione corretta e tornano alla stringa originale se non viene trovata alcuna traduzione.

Stringhe di base

Usa __() quando devi restituire una stringa. Per l’output HTML (che è quasi sempre il caso), usa le varianti con escape:

// Return a translated string
$label = __( 'Settings', 'my-plugin' );

// Echo a translated string, escaped for HTML
echo esc_html__( 'Settings saved.', 'my-plugin' );

Gli standard di codifica di WordPress raccomandano echo esc_html__() rispetto a _e() perché rende esplicito l’escaping dell’output. È una buona abitudine da applicare con costanza.

Stringhe con variabili

Se concateni una variabile direttamente in una stringa, i traduttori vedranno solo i frammenti e non la frase completa. Ciò rende impossibile tradurre correttamente, specialmente nelle lingue in cui l’ordine delle parole è diverso. Usa invece printf() o sprintf() con un placeholder e aggiungi un commento per i traduttori, in modo che sappiano cosa rappresenta %s:

printf(
    /* translators: %s: the user's display name */
    esc_html__( 'Welcome back, %s.', 'my-plugin' ),
    esc_html( $display_name )
);

Forme plurali

In inglese i plurali sono semplici: un commento, due commenti. Altre lingue non sono così immediate. Alcune hanno diverse forme plurali a seconda del numero. Usa _n() per gestire correttamente questa situazione, indipendentemente dalla lingua in cui viene tradotto il tuo plugin:

printf(
    esc_html( _n(
        '%s comment',
        '%s comments',
        $count,
        'my-plugin'
    ) ),
    number_format_i18n( $count )
);

Stringhe che necessitano di contesto

Alcune parole hanno significati diversi a seconda di dove appaiono. Usa _x() per dare ai traduttori il contesto di cui hanno bisogno per ottenere la traduzione corretta:

// "Export" as a noun (the file) vs. a verb (the action)
echo esc_html_x( 'Export', 'button label', 'my-plugin' );

Passaggio 3

Internazionalizza le tue stringhe JavaScript

WordPress fornisce il pacchetto wp-i18n in modo da poter utilizzare in JavaScript le stesse funzioni gettext che usi in PHP. Quando registri il tuo script, dichiara wp-i18n come dipendenza:

wp_register_script(
    'my-plugin-script',
    plugins_url( 'js/app.js', __FILE__ ),
    array( 'wp-i18n' ),
    '1.0.0',
    true
);

Poi nel tuo file JavaScript:

const { __, _n, sprintf } = wp.i18n;

const message = __( 'Settings saved.', 'my-plugin' );

Se stai usando un bundler come Webpack, usa @wordpress/babel-plugin-makepot per estrarre le stringhe traducibili dal tuo bundle come parte del processo di build.

Passaggio 4

Genera il tuo file POT

Una volta racchiuse le stringhe, devi generare un file POT (Portable Object Template). Questo è il file sorgente su cui lavora PTC (o qualsiasi traduttore). Contiene tutte le tue stringhe traducibili ma ancora nessuna traduzione.

Esegui questo comando dalla directory root del tuo plugin o tema:

wp i18n make-pot . languages/my-plugin.pot

WP-CLI scansiona i tuoi file PHP, JavaScript e block.json alla ricerca di chiamate gettext e le compila in un unico file POT. Se stai usando Composer, puoi aggiungerlo come script di Composer in modo che il comando rimanga coerente in tutto il team e non richieda un’installazione globale di WP-CLI.

La suite completa wp i18n include tutto il resto di cui avrai bisogno in seguito nel flusso di lavoro:

Comando Cosa fa
wp i18n make-pot Genera un file POT dal sorgente
wp i18n update-po Sincronizza i file PO esistenti quando il tuo POT cambia
wp i18n make-mo Compila i file PO in file binari MO
wp i18n make-json Estrae le stringhe JS dai PO in file JSON
wp i18n make-php Genera file l10n.php (WordPress 6.5+)

Tradurre i file POT con PTC

PTC è una piattaforma di traduzione creata pensando agli sviluppatori WordPress. Inizi con un file POT e ottieni file di traduzione pronti per la produzione senza alcuna conversione manuale da parte tua.

Se non hai mai usato PTC prima d’ora, puoi iscriverti per una prova gratuita di 30 giorni. Il tuo primo progetto include fino a 20.000 parole in due lingue, così puoi tradurre un vero plugin o tema prima di impegnarti.

1

Impostare il tuo primo progetto di traduzione

Per iniziare, carica il tuo file POT e scegli i formati di output di cui hai bisogno. PTC può restituire qualsiasi combinazione di:

  • file .po per ogni lingua di destinazione
  • .mo file, compilati e pronti per la distribuzione
  • .json file per le tue stringhe JavaScript
  • .l10n.php file per un caricamento più rapido su WordPress 6.5 e versioni successive

Vale la pena abilitare il formato .l10n.php per i nuovi progetti. WordPress lo carica automaticamente al posto del file MO quando sono presenti entrambi, ed è più veloce e leggero in memoria.

Output di traduzione per i file POT

Il wizard di configurazione ti chiede anche di descrivere il tuo tema o plugin in modo che PTC possa generare traduzioni con il tono e il contesto giusti per il tuo prodotto specifico. In questa fase puoi anche aggiungere termini specifici del brand al glossario, il che garantisce che nomi, funzionalità e qualsiasi terminologia siano tradotti in modo coerente in tutte le lingue.

Consulta la guida introduttiva per una panoramica completa di questi passaggi.

2

Passare alla localizzazione continua

Una volta tradotti i primi file, puoi connettere PTC al tuo repository GitHub, GitLab o Bitbucket. Oppure, puoi integrare la localizzazione nella tua pipeline CI/CD con l’API.

Da quel momento in poi, non avrai più bisogno di caricare i file manualmente. Quando il tuo file POT cambia, PTC rileva le stringhe nuove e aggiornate e restituisce i file tradotti: tramite merge request per Git, o direttamente tramite l’API. Le tue traduzioni rimangono sincronizzate con il tuo codice in ogni release.

Caricamento delle traduzioni in WordPress

Una volta ottenuti i file tradotti, devi posizionarli nella posizione corretta e dire a WordPress dove trovarli.

Prima di fare una di queste due cose, assicurati che i nomi dei file siano corretti. WordPress cerca i file di traduzione utilizzando un modello di denominazione specifico, e un nome file che non corrisponde significa che il file semplicemente non verrà caricato.

Assegnare i nomi corretti ai file

I codici locale seguono il formato language_COUNTRY: de_DE per il tedesco (Germania), fr_FR per il francese (Francia), pt_BR per il portoghese (Brasile). Puoi trovare l’elenco completo dei codici locale di WordPress su translate.wordpress.org.

Il nome file atteso dipende da dove posizioni il file.

All’interno della cartella /languages/ del tuo plugin:

{text-domain}-{locale}.mo
my-plugin-de_DE.mo

All’interno della cartella /languages/ del tuo tema:

{locale}.mo
de_DE.mo

Nella directory globale delle lingue di WordPress (/wp-content/languages/):

{text-domain}-{locale}.mo
my-plugin-de_DE.mo

Nota che i temi usano una convenzione di denominazione più breve quando i file sono inclusi nel tema stesso. Se stai posizionando i file nella directory globale delle lingue, sia i plugin che i temi usano il modello {text-domain}-{locale}.

Caricare le traduzioni per i plugin (PHP)

Dopo che i file di traduzione sono a posto, devi registrarli con WordPress in modo che sappia quali file appartengono al tuo plugin e dove trovarli. Usa load_plugin_textdomain() agganciato a init. Non usare plugins_loaded. Attiva un avviso di deprecazione nelle versioni correnti di WordPress.

add_action( 'init', function () {
    load_plugin_textdomain(
        'my-plugin',
        false,
        dirname( plugin_basename( __FILE__ ) ) . '/languages/'
    );
} );

Caricare le traduzioni per i temi (PHP)

Per i temi, usa load_theme_textdomain() agganciato a after_setup_theme. Questo hook viene attivato durante l’inizializzazione del tema, che è il momento giusto per WordPress per caricare i tuoi file di traduzione.

add_action( 'init', function () {
    wp_set_script_translations(
        'my-plugin-script',
        'my-plugin',
        plugin_dir_path( __FILE__ ) . 'languages'
    );
} );

Tradurre il tuo README e la scheda di WordPress.org

Il tuo readme.txt non è un file di risorse, quindi WP-CLI non lo rileverà durante la generazione di un file POT. Per tradurlo, usa la funzione Incolla per tradurre di PTC: incolla il contenuto, scegli le lingue di destinazione e scarica il risultato.

Funzione Incolla per tradurre

Se il tuo plugin o tema è presente su WordPress.org, la descrizione tradotta appare nella scheda Dettagli del plugin nella lingua dell’utente. Per pubblicare le tue traduzioni lì, segui il processo di importazione di WordPress.org.

Domande frequenti

Pronto a distribuire temi e plugin WordPress completamente tradotti?

Iscriviti per una prova gratuita di 30 giorni e traduci il tuo primo progetto in due lingue — fino a 20.000 parole — in modo completamente gratuito.

Scorri verso l'alto