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.potWP-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 .
poper ogni lingua di destinazione .mofile, compilati e pronti per la distribuzione.jsonfile per le tue stringhe JavaScript.l10n.phpfile 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.

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.moAll’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.moNota 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.

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
Qual è la differenza tra i file POT, PO, MO e l10n.php?
Fanno tutti parte della stessa pipeline di traduzione, ognuno con uno scopo diverso:
- Un file POT (Portable Object Template) è il file sorgente che generi dal tuo codice. Contiene tutte le tue stringhe traducibili nella loro lingua originale ma nessuna traduzione. È il file che consegni a PTC.
- Un file PO (Portable Object) è una copia del tuo file POT con le traduzioni aggiunte per una lingua specifica. È leggibile dall’uomo, quindi i traduttori possono lavorarci direttamente.
- Un file MO (Machine Object) è una versione binaria compilata di un file PO. WordPress lo usa per caricare le traduzioni in PHP perché è più veloce da leggere rispetto al formato PO in testo semplice.
- I file JSON servono allo stesso scopo dei file MO ma per le stringhe JavaScript. WordPress non può usare i file MO per JavaScript, quindi le tue traduzioni JS vengono estratte e memorizzate separatamente in formato JSON.
- Un file l10n.php è un’alternativa più recente ai file MO, introdotta in WordPress 6.5. Si carica più velocemente e usa meno memoria, e WordPress lo userà automaticamente quando ne sarà disponibile uno insieme al file MO.
Posso affidarmi alla community di traduzione di WordPress invece di usare uno strumento di traduzione?
Nella maggior parte dei casi, no. La traduzione della community su WordPress.org è gestita da volontari. In pratica, ciò significa che solo un piccolo numero di plugin ampiamente utilizzati ha traduzioni complete nelle principali lingue europee. La maggior parte dei plugin ha traduzioni parziali e, per i locale meno comuni, molti non ne hanno affatto.
Se vuoi che i tuoi utenti abbiano un’esperienza completamente tradotta fin dal primo giorno, aspettare la community non è una strategia realistica. Le traduzioni possono richiedere mesi o anni per apparire, se mai appaiono. L’uso di uno strumento come PTC significa che distribuisci traduzioni complete insieme alla tua lingua sorgente, secondo i tuoi tempi, senza dipendere dai volontari.
Un’analisi di oltre 60.000 plugin e temi WordPress lo conferma: la traduzione della community copre meno del 5% delle esigenze di traduzione in 40 lingue.
Se uso PTC, ho bisogno di Poedit?
No. Tutto in questa guida funziona con WP-CLI e PTC. WP-CLI genera il tuo file POT e può compilare file MO e JSON quando necessario. PTC gestisce la traduzione e restituisce tutti i formati di file di cui WordPress ha bisogno. Poedit è un utile editor desktop se preferisci tradurre manualmente, ma non fa parte di questo flusso di lavoro.
Devo fare qualcosa di diverso affinché il mio tema/plugin supporti le lingue RTL?
Il flusso di lavoro della traduzione è lo stesso. Le lingue da destra a sinistra (RTL) usano la stessa pipeline POT/PO/MO di qualsiasi altra lingua. Il passaggio extra consiste nell’assicurarsi che il tuo tema supporti gli stili RTL. WordPress carica automaticamente un file rtl.css se ne esiste uno nella directory del tuo tema, e puoi usare la funzione is_rtl() per applicare condizionalmente stili o script specifici per RTL.
Come faccio ad assicurarmi che date e numeri siano visualizzati correttamente per ogni locale?
Se il tuo plugin o tema visualizza date o numeri, usa le funzioni di formattazione integrate di WordPress invece di quelle native di PHP. date_i18n() formatta le date in base al locale attivo, e number_format_i18n() gestisce la formattazione dei numeri sensibile al locale. Queste non fanno parte del flusso di lavoro dei file di traduzione, ma sono importanti per un’esperienza completamente localizzata.
Perché le traduzioni non vengono visualizzate nel mio tema o plugin?
La causa più comune è una mancata corrispondenza del text domain. Il tuo codice, i nomi dei file e la chiamata load_plugin_textdomain() devono usare tutti esattamente la stessa stringa. Anche le traduzioni della community di WordPress.org possono sovrascrivere silenziosamente i tuoi file inclusi. Consulta la guida completa alla risoluzione dei problemi per scenari e soluzioni specifici.

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.


Traduci temi e plugin con PTC
Ottieni traduzioni accurate in pochi minuti
Carica singoli file o automatizza tramite API o integrazione Git