{"id":551,"date":"2026-07-09T07:28:00","date_gmt":"2026-07-09T05:28:00","guid":{"rendered":"https:\/\/aarkly.com\/?p=551"},"modified":"2026-08-08T12:25:11","modified_gmt":"2026-08-08T10:25:11","slug":"internationalization-i18n-wordpress-plugins-2","status":"publish","type":"post","link":"https:\/\/aarkly.com\/it\/internationalization-i18n-wordpress-plugins-2\/","title":{"rendered":"Internazionalizzazione (i18n) per i Plugin WordPress: Guida Completa"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Se stai costruendo un plugin WordPress per il repository pubblico, l'internazionalizzazione \u2014 comunemente chiamata i18n \u2014 non \u00e8 opzionale. WordPress \u00e8 usato in oltre 200 paesi e oltre il 50% delle installazioni usa lingue diverse dall'inglese. Un plugin che non \u00e8 pronto per la traduzione esclude pi\u00f9 della met\u00e0 del suo potenziale pubblico.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fortunatamente, WordPress fornisce un sistema i18n completo che rende semplice preparare il tuo plugin alla traduzione. Questa guida copre tutto ci\u00f2 che devi sapere, dalle funzioni PHP di base all'i18n JavaScript fino al flusso di traduzione GlotPress.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le Basi: __() e _e()<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Al centro dell'i18n di WordPress ci sono due funzioni che marcano le stringhe per la traduzione. La funzione __() restituisce la stringa tradotta, mentre _e() la stampa direttamente. Entrambe accettano due parametri: la stringa da tradurre e il text domain \u2014 un identificatore univoco per le traduzioni del tuo plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ogni stringa che appare nell'interfaccia utente del tuo plugin dovrebbe essere avvolta in una di queste funzioni. Questo include i testi dei pulsanti, le etichette, i messaggi di errore, i titoli delle pagine di amministrazione e le descrizioni delle impostazioni. Se un utente pu\u00f2 vederla, dovrebbe essere traducibile.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Il Text Domain: La Chiave di Traduzione del Tuo Plugin<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il text domain \u00e8 uno slug univoco che identifica il tuo plugin nel sistema di traduzione. Deve corrispondere allo slug del tuo plugin nella directory WordPress.org. Lo dichiari nell'intestazione del plugin e lo carichi con la funzione load_plugin_textdomain(), tipicamente in un hook collegato a plugins_loaded.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se cambi il text domain dopo che i plugin sono stati tradotti, tutte le traduzioni esistenti si rompono. Scegli il text domain con attenzione e non cambiarlo mai.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Plurali e Contesto<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L'inglese ha regole di plurale semplici, ma molte lingue hanno forme plurali complesse. Usa _n() per le stringhe che richiedono la gestione singolare\/plurale. Accetta quattro parametri: la forma singolare, la forma plurale, il numero per determinare quale forma usare e il text domain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per le stringhe che richiedono contesto aggiuntivo \u2014 come \u00abpost\u00bb nel senso editoriale rispetto a \u00abpost\u00bb come posta \u2014 usa _x() e _ex(). Queste funzioni aggiungono un parametro di contesto che aiuta i traduttori a comprendere il significato corretto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Variabili nelle Stringhe Tradotte<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Non concatenare mai stringhe tradotte con variabili. L'ordine delle parole cambia tra le lingue e le variabili hardcoded rompono le traduzioni. Usa sprintf() con la sintassi dei segnaposto per inserire variabili nelle stringhe tradotte.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Usa %s per le stringhe, %d per gli interi e %f per i numeri in virgola mobile. Aggiungi segnaposto numerati come %1$s quando devi riferirti alla stessa variabile pi\u00f9 volte o cambiare l'ordine delle variabili in una traduzione.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">i18n JavaScript con wp.i18n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per il codice JavaScript nel tuo plugin \u2014 in particolare i blocchi Gutenberg personalizzati e le interfacce di amministrazione \u2014 usa il pacchetto wp.i18n fornito da WordPress. Fornisce equivalenti di __(), _n(), _x() e sprintf() che funzionano lato client.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per usare wp.i18n, metti in coda lo script wp-i18n come dipendenza del tuo file JavaScript. Poi usa le funzioni direttamente nel tuo codice. Il processo di build di WordPress estrae le stringhe dai tuoi file JavaScript e genera automaticamente i file di traduzione.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Generare i File POT<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il file POT (Portable Object Template) \u00e8 il modello principale che i traduttori usano per creare traduzioni in lingue specifiche. Contiene tutte le stringhe traducibili del tuo plugin. Generalo usando uno strumento come il comando i18n di WP-CLI o un plugin come Loco Translate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esegui wp i18n make-pot . languages\/my-plugin.pot dalla directory del tuo plugin. Questo scansiona i tuoi file PHP e JavaScript, estrae tutte le stringhe traducibili e genera il file POT. Includi questo file nella directory languages del plugin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La Piattaforma di Traduzione di WordPress.org<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando il tuo plugin \u00e8 su WordPress.org, i traduttori possono contribuire con traduzioni tramite translate.wordpress.org. La piattaforma rileva automaticamente il file POT del tuo plugin e lo rende disponibile per la traduzione. I traduttori della community possono inviare traduzioni per la loro lingua e gli utenti ricevono automaticamente le traduzioni per il loro locale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per ottenere il massimo da questa piattaforma, mantieni aggiornato il file POT a ogni release. Aggiungi commenti chiari alle tue funzioni i18n per aiutare i traduttori a comprendere il contesto. Rivedi le traduzioni inviate prima che vengano pubblicate.<\/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. Avvolgi ogni stringa rivolta all'utente in __() o _e(). Usa sprintf() per le variabili. Genera il file POT a ogni release. Mantieni coerente il text domain. Queste pratiche aprono il tuo plugin a un pubblico globale e sono richieste per la directory WordPress.org.<\/p>","protected":false},"excerpt":{"rendered":"<p>Una guida completa per preparare il tuo plugin WordPress alla traduzione, coprendo le funzioni stringa PHP, l'i18n JavaScript e la pipeline di traduzione di WordPress.<\/p>","protected":false},"author":3,"featured_media":1237,"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-551","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\/551","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=551"}],"version-history":[{"count":2,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/posts\/551\/revisions"}],"predecessor-version":[{"id":1347,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/posts\/551\/revisions\/1347"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/media\/1237"}],"wp:attachment":[{"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/media?parent=551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/categories?post=551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/tags?post=551"},{"taxonomy":"ai_visibility","embeddable":true,"href":"https:\/\/aarkly.com\/it\/wp-json\/wp\/v2\/ai_visibility?post=551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}