Come tradurre i file PO senza compromettere la tua app

OpenL Team 7/3/2026
Come tradurre i file PO senza compromettere la tua app

TABLE OF CONTENTS

I file PO sembrano semplici file di testo, finché una traduzione errata di %s, una forma plurale mancante o una modifica a msgid non manda in crash la tua app. Segui questo workflow per tradurre le stringhe rivolte agli utenti mantenendo intatta la struttura gettext.

Non incollare l’intero file in un traduttore di testo normale. Un file PO è simile al codice sorgente: le parole sono traducibili, ma la struttura del file, i segnaposto, i commenti e gli indici dei plurali devono rimanere invariati.

Metodo 1: Usa un Traduttore di File PO

Scegli questa opzione se vuoi una prima bozza sicura e veloce e non vuoi modificare a mano le coppie msgid / msgstr.

  1. Fai una copia di backup del file .po originale. Conserva una copia pulita nel tuo repository prima di inviare qualsiasi cosa a un traduttore. Se il file tradotto dovesse dare problemi, ti servirà una versione sicura con cui confrontarlo.

  2. Apri un traduttore compatibile con i file PO. Usa uno strumento progettato per i file gettext, come OpenL PO Translator, uno strumento di traduzione documentale a pagamento. Uno strumento PO-aware dovrebbe tradurre solo le stringhe di destinazione, mantenendo intatti stringhe sorgente, commenti, segnaposto e struttura del file. Se stai ancora scegliendo lo strumento, confronta le opzioni nella nostra guida ai migliori traduttori PO.

  3. Carica il file .po. Usa il file di lingua che contiene le voci msgid e msgstr. Se hai solo un template .pot, crea prima un file .po nella lingua di destinazione e poi carica il file .po.

  4. Scegli la lingua di origine e di destinazione. Abbina la lingua di origine al testo dentro msgid, non alla lingua dell’interfaccia di amministrazione. Ad esempio, se il file contiene stringhe msgid in inglese e ti serve la traduzione in spagnolo, scegli da inglese a spagnolo.

  5. Scarica il file tradotto. Salvalo seguendo la convenzione di denominazione delle localizzazioni prevista dal tuo framework. I plugin di WordPress spesso usano uno schema con dominio di testo più locale, mentre Django di solito salva i file in locale/<lingua>/LC_MESSAGES/.

  6. Controlla prima le stringhe a rischio. Cerca nel file tradotto i caratteri %, {, }, <, >, msgid_plural, msgctxt e #, fuzzy. Queste sono le voci che più probabilmente possono influenzare il comportamento dell’applicazione in fase di esecuzione.

  7. Testa il file tradotto nella tua app. Carica la lingua in locale e naviga tra le schermate che utilizzano le stringhe tradotte. Un file PO non è completo quando è stato tradotto, ma quando l’app continua a visualizzarsi correttamente.

Metodo 2: Tradurre file PO con Poedit

Scegli questa opzione se hai bisogno di una revisione umana, compatibilità con WordPress o un flusso di lavoro attento voce per voce.

  1. Apri il file in Poedit. Poedit è un editor di traduzione dedicato per file PO e altri formati di localizzazione; l’editor di base è gratuito, mentre le funzionalità Pro a pagamento sono pensate per flussi di lavoro più avanzati. Per WordPress, il manuale ufficiale Polyglots spiega che Poedit può creare file .po e .mo a partire da un file POT e supporta le forme plurali e UTF-8.

  2. Aggiorna dal template POT se il testo sorgente è cambiato. Se gli sviluppatori hanno modificato il testo dell’app, aggiorna il file .po dall’ultimo .pot prima di tradurre. In questo modo le stringhe nuove, rimosse e fuzzy rimangono visibili, evitando di distribuire silenziosamente testi UI obsoleti.

  3. Traduci solo il campo msgstr. Il msgid è la stringa sorgente che la tua app utilizza per cercare la traduzione. Nei normali flussi di lavoro gettext, i traduttori devono modificare msgstr, non msgid.

  4. Mantieni intatti i segnaposto. Non tradurre né modificare la spaziatura di variabili come %s, %d, %1$s, {name}, %(count)s, :name o tag HTML. Se l’ordine delle parole deve cambiare, sposta il segnaposto come unità.

  5. Gestisci le forme plurali come traduzioni separate. Una voce plurale può contenere msgid, msgid_plural e diversi valori msgstr[n]. Compila ogni campo plurale richiesto dalla lingua di destinazione, invece di copiare ovunque la stessa frase.

  6. Salva e compila il file .mo se la tua app ne ha bisogno. Alcuni stack leggono direttamente i file .po durante lo sviluppo, ma WordPress e molte configurazioni gettext utilizzano i file .mo compilati in fase di esecuzione. Poedit può compilare automaticamente il file .mo al salvataggio; Django può compilare i messaggi con django-admin compilemessages.

  7. Risolvi gli avvisi prima del caricamento. In Poedit, le icone di avviso spesso segnalano segnaposto errati, variabili mancanti o discrepanze nei plurali. Correggi questi problemi prima di importare la traduzione in WordPress, Django, Drupal o nel tuo branch di rilascio.

Metodo 3: Usa una piattaforma di localizzazione

Scegli questa opzione quando più traduttori, revisori o responsabili di rilascio devono lavorare sugli stessi file PO.

  1. Importa il file PO in una piattaforma che supporta gettext. Weblate e piattaforme di localizzazione simili supportano i flussi di lavoro con file PO. Le piattaforme di localizzazione per team sono spesso prodotti a pagamento, anche se Weblate offre anche un’opzione open-source self-hosted. La gestione di commenti, intestazioni, stringhe fuzzy e segnaposto varia da piattaforma a piattaforma, quindi controlla le impostazioni del formato prima di caricare file destinati alla produzione.

  2. Imposta i controlli su segnaposto e tag. Attiva le regole di QA per segnaposto in stile printf, variabili nominate, tag HTML/XML e forme plurali. Questi controlli rilevano errori che i normali correttori ortografici non possono individuare.

  3. Mantieni visibili i commenti degli sviluppatori. I commenti nei file PO possono fornire contesto come riferimenti alla sorgente, note estratte dagli sviluppatori, flag e stringhe sorgente precedenti. I traduttori hanno bisogno di queste note quando un’etichetta UI breve come “Open” potrebbe essere un verbo, un aggettivo o un comando di menu.

  4. Usa la memoria di traduzione con revisione. La memoria di traduzione è utile per stringhe UI ripetute, ma può copiare una vecchia traduzione in un nuovo contesto. Rivedi le stringhe riutilizzate quando cambiano msgctxt, riferimenti alla sorgente o l’interfaccia circostante.

  5. Esporta i file PO ed esegui controlli locali. Non fidarti ciecamente dell’esportazione. Reimporta il file tradotto nell’app, compila se necessario e testa le schermate prima di effettuare il merge.

Regole sui file PO che non dovresti mai infrangere

PO itemTradurlo?Esempio sicuroPerché è importante
msgidNomsgid "Save changes"L’app utilizza questa stringa sorgente come chiave di ricerca in molti flussi di lavoro gettext.
msgstrmsgstr "Salva modifiche"Questo è il testo nella lingua di destinazione che gli utenti vedono.
msgctxtNomsgctxt "button"Il contesto distingue stringhe sorgente identiche.
%s, %d, %1$sNoHello, %s -> Ciao, %sIl codice in fase di esecuzione sostituisce questi segnaposto con valori reali.
{name}, %(count)s, :nameNoWelcome, {name}Le variabili nominate devono corrispondere al codice dell’app.
Tag HTMLDi solito no<strong>Warning</strong>Traduci il testo, non la sintassi del tag.
msgid_pluralNomsgid_plural "%d files"Il plurale sorgente appartiene al percorso di codice originale.
msgstr[0], msgstr[1]Sì, con attenzionemsgstr[0] "%d file"Ogni lingua di destinazione ha le proprie regole di plurale.
#, fuzzyDa revisionare prima#, fuzzyFuzzy significa che la traduzione potrebbe essere obsoleta o non confermata.
#. commenti degli sviluppatoriDi solito no#. Button labelQueste note aiutano i traduttori a comprendere il contesto.

Esempio rapido: Traduzione PO sicura vs. errata

Ecco una voce gettext normale:

#. %s is the user's display name.
#, c-format
msgid "Welcome back, %s"
msgstr ""

Una traduzione sicura in spagnolo mantiene %s invariato:

#. %s is the user's display name.
#, c-format
msgid "Welcome back, %s"
msgstr "Bienvenido de nuevo, %s"

Una traduzione errata modifica il segnaposto:

msgid "Welcome back, %s"
msgstr "Bienvenido de nuevo, % s"

Anche un piccolo spazio può fare la differenza. GNU msgfmt --check-format è progettato per rilevare incongruenze nei format-string come segnaposto % errati, e anche Poedit avvisa su problemi comuni con i segnaposto. Per un elenco più ampio di stringhe che non vanno toccate, consulta la nostra guida su cosa non tradurre.

Come controllare un file PO tradotto

  1. Esegui la validazione gettext se hai gettext installato.
msgfmt --check --check-format -o /tmp/messages.mo path/to/messages.po

Questo comando controlla la sintassi, le intestazioni e le stringhe di formato, quindi scrive un catalogo compilato temporaneo se il file è valido.

  1. Compila il file secondo le modalità previste dal tuo framework.
django-admin compilemessages

Per i progetti Django, compilemessages compila i file .po creati da makemessages in file .mo per il supporto gettext.

  1. Cerca traduzioni vuote.
grep -n 'msgstr ""' path/to/messages.po

I campi msgstr vuoti possono essere intenzionali per le voci non tradotte, ma non dovrebbero sorprenderti al momento del rilascio.

  1. Cerca stringhe fuzzy.
grep -n '#, fuzzy' path/to/messages.po

Le stringhe fuzzy dovrebbero essere revisionate da una persona prima del rilascio. Di default, msgfmt non utilizza le traduzioni fuzzy a meno che tu non compili con --use-fuzzy, quindi una voce fuzzy può comportarsi come una stringa non tradotta nel catalogo finale.

  1. Testa l’interfaccia reale. Apri le schermate che contengono form, conteggi plurali, messaggi di errore, menu account e flussi di pagamento. La validazione dei file PO rileva i problemi nei file; solo il test sull’interfaccia utente individua formulazioni poco naturali, overflow e mancanza di contesto.

Quale metodo dovresti usare?

SituazioneMetodo migliorePerché
Hai bisogno di una bozza veloce per un singolo file POTraduttore di file POIl percorso più rapido mantenendo la struttura
Gestisci un plugin o tema WordPressPoeditWorkflow WordPress familiare con compilazione .mo
Gestisci un’app DjangoTraduttore PO o Poedit, poi compilemessagesLa traduzione può essere rapida, ma è comunque richiesta la compilazione del framework
Hai molte lingue e revisoriPiattaforma di localizzazioneMigliore assegnazione, cronologia, controllo QA e revisione
Stai traducendo stringhe rivolte agli sviluppatoriRevisione umana dopo la traduzione automaticaI termini di codice, i segnaposto e il contesto sono più importanti
Devi localizzare anche file JSON o i18n frontendUsa un workflow specifico per il formatoLe regole dei file PO non sempre si applicano a JSON, YAML o messaggi ICU

Se il tuo progetto combina file gettext PO con file di localizzazione JSON, traduci ogni formato con uno strumento che ne comprenda la struttura. I file PO ruotano attorno a msgid e msgstr; la localizzazione JSON si basa su chiavi e valori. Per questo tipo di workflow, consulta la nostra guida ai migliori traduttori JSON nel 2026.

FAQ

Posso tradurre i file PO con Google Translate?

Puoi copiare singoli valori msgstr in un traduttore generico, ma caricare o incollare l’intero file PO in un traduttore di testo semplice è rischioso. I traduttori generici potrebbero modificare msgid, commenti, escape delle virgolette, indici plurali o segnaposto. Usa invece un traduttore compatibile con PO, Poedit o una piattaforma di localizzazione.

Qual è la differenza tra .po, .pot e .mo?

.pot è il template estratto dal codice sorgente. Di solito contiene solo le stringhe originali, senza traduzioni completate. .po è il file di traduzione modificabile per una lingua di destinazione. .mo è il catalogo binario compilato che molte app basate su gettext caricano in fase di esecuzione.

Devo tradurre msgid?

No, non nel normale flusso di lavoro. Traduci msgstr. Il manuale di GNU gettext descrive msgid come la stringa originale non tradotta e msgstr come la traduzione; le stringhe msgid vengono generate e gestite dagli strumenti gettext.

Come posso verificare se un file PO è valido?

Esegui msgfmt --check --check-format se gettext è disponibile, apri il file con Poedit oppure utilizza i controlli QA della tua piattaforma di localizzazione. Successivamente, compila e testa il file all’interno dell’applicazione. La validazione è necessaria, ma non sostituisce il test dell’interfaccia utente.

Cosa succede se modifico un segnaposto in modo errato?

Nel migliore dei casi, l’applicazione mostrerà una stringa strana. Nel peggiore dei casi, il formattatore a runtime genererà un errore perché la stringa tradotta non corrisponde più alle variabili passate dal codice. I segnaposto devono essere spostati solo come token completi, mai tradotti o modificati parzialmente.

OpenL può tradurre i file PO?

Sì. OpenL PO Translator è progettato per i file .po di gettext e garantisce che segnaposto e variabili rimangano invariati durante la traduzione in oltre 100 lingue. Utilizza un flusso di lavoro di traduzione documentale a consumo, quindi è utile per una prima bozza rapida quando è più importante preservare la struttura PO che tradurre tutto manualmente. Se hai solo un template .pot, crea prima un file .po nella lingua di destinazione prima di usare OpenL.

Fonti