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.
-
Fai una copia di backup del file
.pooriginale. 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. -
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.
-
Carica il file
.po. Usa il file di lingua che contiene le vocimsgidemsgstr. Se hai solo un template.pot, crea prima un file.ponella lingua di destinazione e poi carica il file.po. -
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 stringhemsgidin inglese e ti serve la traduzione in spagnolo, scegli da inglese a spagnolo. -
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/. -
Controlla prima le stringhe a rischio. Cerca nel file tradotto i caratteri
%,{,},<,>,msgid_plural,msgctxte#, fuzzy. Queste sono le voci che più probabilmente possono influenzare il comportamento dell’applicazione in fase di esecuzione. -
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.
-
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
.poe.moa partire da un file POT e supporta le forme plurali e UTF-8. -
Aggiorna dal template POT se il testo sorgente è cambiato. Se gli sviluppatori hanno modificato il testo dell’app, aggiorna il file
.podall’ultimo.potprima di tradurre. In questo modo le stringhe nuove, rimosse e fuzzy rimangono visibili, evitando di distribuire silenziosamente testi UI obsoleti. -
Traduci solo il campo
msgstr. Ilmsgidè la stringa sorgente che la tua app utilizza per cercare la traduzione. Nei normali flussi di lavoro gettext, i traduttori devono modificaremsgstr, nonmsgid. -
Mantieni intatti i segnaposto. Non tradurre né modificare la spaziatura di variabili come
%s,%d,%1$s,{name},%(count)s,:nameo tag HTML. Se l’ordine delle parole deve cambiare, sposta il segnaposto come unità. -
Gestisci le forme plurali come traduzioni separate. Una voce plurale può contenere
msgid,msgid_plurale diversi valorimsgstr[n]. Compila ogni campo plurale richiesto dalla lingua di destinazione, invece di copiare ovunque la stessa frase. -
Salva e compila il file
.mose la tua app ne ha bisogno. Alcuni stack leggono direttamente i file.podurante lo sviluppo, ma WordPress e molte configurazioni gettext utilizzano i file.mocompilati in fase di esecuzione. Poedit può compilare automaticamente il file.moal salvataggio; Django può compilare i messaggi condjango-admin compilemessages. -
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.
-
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.
-
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.
-
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.
-
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. -
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 item | Tradurlo? | Esempio sicuro | Perché è importante |
|---|---|---|---|
msgid | No | msgid "Save changes" | L’app utilizza questa stringa sorgente come chiave di ricerca in molti flussi di lavoro gettext. |
msgstr | Sì | msgstr "Salva modifiche" | Questo è il testo nella lingua di destinazione che gli utenti vedono. |
msgctxt | No | msgctxt "button" | Il contesto distingue stringhe sorgente identiche. |
%s, %d, %1$s | No | Hello, %s -> Ciao, %s | Il codice in fase di esecuzione sostituisce questi segnaposto con valori reali. |
{name}, %(count)s, :name | No | Welcome, {name} | Le variabili nominate devono corrispondere al codice dell’app. |
| Tag HTML | Di solito no | <strong>Warning</strong> | Traduci il testo, non la sintassi del tag. |
msgid_plural | No | msgid_plural "%d files" | Il plurale sorgente appartiene al percorso di codice originale. |
msgstr[0], msgstr[1] | Sì, con attenzione | msgstr[0] "%d file" | Ogni lingua di destinazione ha le proprie regole di plurale. |
#, fuzzy | Da revisionare prima | #, fuzzy | Fuzzy significa che la traduzione potrebbe essere obsoleta o non confermata. |
#. commenti degli sviluppatori | Di solito no | #. Button label | Queste 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
- 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.
- 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.
- 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.
- 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.
- 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?
| Situazione | Metodo migliore | Perché |
|---|---|---|
| Hai bisogno di una bozza veloce per un singolo file PO | Traduttore di file PO | Il percorso più rapido mantenendo la struttura |
| Gestisci un plugin o tema WordPress | Poedit | Workflow WordPress familiare con compilazione .mo |
| Gestisci un’app Django | Traduttore PO o Poedit, poi compilemessages | La traduzione può essere rapida, ma è comunque richiesta la compilazione del framework |
| Hai molte lingue e revisori | Piattaforma di localizzazione | Migliore assegnazione, cronologia, controllo QA e revisione |
| Stai traducendo stringhe rivolte agli sviluppatori | Revisione umana dopo la traduzione automatica | I termini di codice, i segnaposto e il contesto sono più importanti |
| Devi localizzare anche file JSON o i18n frontend | Usa un workflow specifico per il formato | Le 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
- Manuale GNU gettext: File PO — Spiegazione ufficiale di gettext sul formato dei file PO.
- Manuale GNU gettext: Voci nei file PO — Fonte per
msgid,msgstr, commenti, flag e struttura delle voci. - Manuale GNU gettext: Voci con forme plurali — Fonte per la struttura delle voci con forme plurali.
- Manuale GNU gettext: Invocazione di msgfmt — Fonte per
msgfmt --checke la validazione delle stringhe di formato. - OpenL PO Translator — Pagina prodotto OpenL per la traduzione di file
.pomantenendo segnaposto e variabili. - Poedit — Sito ufficiale di Poedit per l’editor di traduzione PO e l’offerta Pro.
- WordPress Polyglots Handbook: Poedit — Guida WordPress all’uso di Poedit, file POT, file PO, compilazione MO e avvisi sui segnaposto.
- Documentazione Django: Traduzione — Flusso di lavoro Django per i file dei messaggi e la traduzione.
- Documentazione Django: compilemessages — Riferimento al comando Django per compilare file
.poin file.mo. - Documentazione Drupal: File PO e POT — Spiegazione Drupal su file
.po,.pot, contesto, forme plurali, commenti e variabili. - Documentazione Weblate: GNU gettext PO — Note della piattaforma di localizzazione su intestazioni PO, stringhe sorgente precedenti, stringhe obsolete e file MO generati.