{"id":548,"date":"2026-07-08T07:15:00","date_gmt":"2026-07-08T05:15:00","guid":{"rendered":"https:\/\/aarkly.com\/?p=548"},"modified":"2026-08-08T12:25:11","modified_gmt":"2026-08-08T10:25:11","slug":"internationalization-i18n-wordpress-plugins","status":"publish","type":"post","link":"https:\/\/aarkly.com\/it\/internationalization-i18n-wordpress-plugins\/","title":{"rendered":"Internazionalizzazione (i18n) per i Plugin WordPress: Rendere il Tuo Plugin Globale"},"content":{"rendered":"<p class=\"wp-block-paragraph\">La directory dei plugin di WordPress serve utenti in oltre 200 paesi. Se il tuo plugin \u00e8 disponibile solo in inglese, escludi una parte significativa del tuo potenziale mercato. L'internazionalizzazione (i18n) \u2014 preparare il plugin alla traduzione \u2014 \u00e8 uno degli investimenti con il ROI pi\u00f9 alto che tu possa fare come sviluppatore di plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress ha un sistema di internazionalizzazione maturo che rende semplice preparare il tuo plugin alla traduzione in qualsiasi lingua. Il sistema usa gettext, un framework di traduzione ampiamente adottato, e funziona con strumenti come Poedit e GlotPress.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le Funzioni Principali: __(), _e() e le Altre<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress fornisce diverse funzioni per l'internazionalizzazione. La pi\u00f9 basilare \u00e8 __(), che restituisce una stringa tradotta. La sua controparte _e() stampa direttamente la stringa tradotta. Usa __() quando devi catturare la stringa tradotta in una variabile e _e() quando la emetti direttamente nell'HTML.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per le stringhe che includono segnaposto, usa sprintf() con la stringa tradotta come argomento di formato. WordPress fornisce anche _n() per la gestione singolare\/plurale, _x() per le stringhe che richiedono contesto (come \u00abpost\u00bb come verbo rispetto al nome) e _nx() per forme plurali sensibili al contesto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Text Domain: Come WordPress Identifica le Stringhe del Tuo Plugin<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ogni plugin che usa l'internazionalizzazione ha bisogno di un text domain unico. \u00c8 una stringa che identifica le traduzioni del tuo plugin nel sistema WordPress. Il text domain deve corrispondere esattamente allo slug del tuo plugin ed \u00e8 definito nel commento di intestazione del plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Carica il text domain nell'inizializzazione del plugin usando load_plugin_textdomain(). Questa funzione dice a WordPress dove trovare i file di traduzione. La posizione standard \u00e8 la directory \/languages\/ del plugin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creare i File di Traduzione<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I file di traduzione usano i formati .po (Portable Object) e .mo (Machine Object). Il file .po \u00e8 leggibile dall'uomo e contiene le stringhe originali con le loro traduzioni. Il file .mo \u00e8 un binario compilato che WordPress legge per le prestazioni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Genera il file .pot (Portable Object Template) iniziale usando uno strumento come il comando i18n di WP-CLI o Poedit. Il file .pot contiene tutte le stringhe traducibili del tuo plugin. I traduttori usano il file .pot come modello per creare i file .po per ogni lingua.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dai un nome ai tuoi file usando il formato standard: {text-domain}-{locale}.po. Per l'italiano, \u00e8 my-plugin-it_IT.po. Una volta tradotto il file .po, compilalo in formato .mo usando msgfmt o la funzione di salvataggio di Poedit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Buone Pratiche per Stringhe Traducibili<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Scrivere stringhe che si traducono bene richiede una certa disciplina. Ecco le pratiche pi\u00f9 importanti:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Usa frasi complete invece di frammenti concatenati. I traduttori hanno bisogno del contesto completo per produrre traduzioni accurate.<\/li>\n<li>Evita l'HTML all'interno delle stringhe traducibili. Se ti serve HTML in una stringa tradotta, usa sprintf() per inserire l'HTML come variabile.<\/li>\n<li>Non spezzare le frasi in pi\u00f9 chiamate __(). Ogni chiamata viene tradotta indipendentemente e la struttura delle frasi varia tra le lingue.<\/li>\n<li>Includi commenti per i traduttori sulle stringhe ambigue. Usa un commento PHP che inizia con \u00abtranslators:\u00bb sopra la chiamata __() per fornire contesto.<\/li>\n<li>Usa segnaposto per numeri, nomi e valori dinamici. I traduttori devono vedere la struttura completa della frase per produrre traduzioni naturali.<\/li>\n<li>Codifica il text domain in ogni chiamata di internazionalizzazione. Non usare una variabile per il text domain: rompe la capacit\u00e0 degli strumenti di traduzione di estrarre le tue stringhe.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Internazionalizzazione JavaScript<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se il tuo plugin usa JavaScript (per i blocchi Gutenberg, le interfacce di amministrazione o l'interattivit\u00e0 frontend), devi internazionalizzare anche quelle stringhe. WordPress fornisce il pacchetto wp-i18n per JavaScript, che rispecchia le funzioni di internazionalizzazione PHP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Usa le funzioni __() e _n() di @wordpress\/i18n nel tuo codice JavaScript. Configura le traduzioni dello script usando wp_set_script_translations() in PHP, che dice a WordPress di caricare i file di traduzione per il tuo script.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Usare la Piattaforma di Traduzione di WordPress.org<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se il tuo plugin \u00e8 nella directory dei plugin di WordPress.org, puoi sfruttare la piattaforma di traduzione della community. Traduttori da tutto il mondo possono contribuire con traduzioni per il tuo plugin tramite translate.wordpress.org.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per abilitare le traduzioni della community, assicurati che il plugin abbia un file .pot e che il text domain sia configurato correttamente. Il sistema di WordPress.org rileva automaticamente il plugin e lo rende disponibile per la traduzione. Le traduzioni della community vengono incluse automaticamente negli aggiornamenti del plugin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Il punto fondamentale<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L'internazionalizzazione non \u00e8 difficile, ma richiede disciplina costante. Usa le funzioni di internazionalizzazione di WordPress per ogni stringa che potrebbe comparire nell'interfaccia utente. Genera regolarmente il file .pot. Testa il plugin con una lingua di traduzione per individuare stringhe hardcoded che potresti aver dimenticato.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lo sforzo ripaga quando il tuo plugin raggiunge utenti che non parlano inglese. Molti dei plugin WordPress di maggior successo hanno traduzioni in oltre 20 lingue, e spesso quelle traduzioni sono contribuite dalla community piuttosto che dallo sviluppatore. Rendi facile contribuire ai traduttori, e lo faranno.<\/p>","protected":false},"excerpt":{"rendered":"<p>Una guida completa per internazionalizzare il tuo plugin WordPress per un pubblico globale, dalla preparazione delle stringhe ai file di traduzione fino agli strumenti di localizzazione.<\/p>","protected":false},"author":3,"featured_media":1240,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ai_primary_source":"","visibility_scope":"","ai_summary":"","ai_intent":"","ai_related_resources":"","ai_priority":0,"ai_entity_type":"","ai_is_based_on":"","ai_citations":"","ai_mentions":"","ai_speakable_selector":"","ai_chunk_hints":"","footnotes":""},"categories":[7,6],"tags":[44,27,26,35],"ai_visibility":[],"class_list":["post-548","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-web-development","category-wordpress","tag-api-first","tag-developer-to-founder","tag-plugin-business","tag-saas"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"_links":{"self":[{"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/posts\/548","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/comments?post=548"}],"version-history":[{"count":2,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/posts\/548\/revisions"}],"predecessor-version":[{"id":1350,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/posts\/548\/revisions\/1350"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/media\/1240"}],"wp:attachment":[{"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/media?parent=548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/categories?post=548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/tags?post=548"},{"taxonomy":"ai_visibility","embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/ai_visibility?post=548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}