Scroll to navigation

PO4A-GETTEXTIZE(1p) Strumenti Po4a PO4A-GETTEXTIZE(1p)

NOME

po4a-gettextize - converte un documento originale (e la sua traduzione) in un file PO

SINTASSI

po4a-gettextize -f formato -m originale.doc [-l XX.doc] -p XX.po

(XX.po è l'output, tutti gli altri sono input)

DESCRIZIONE

po4a (PO for anything - N.d.T. PO per tutto) semplifica la manutenzione delle traduzioni della documentazione usando i classici strumenti forniti da gettext. La caratteristica principale di po4a è che separa la traduzione dei contenuti dalla struttura del relativo documento. Fare riferimento alla pagina po4a(7) per un'introduzione a questo progetto.

Lo script po4a-gettextize si occupa di convertire i documenti in file PO. È necessario solo all'inizio quando si deve impostare il progetto di traduzione con po4a, mai successivamente.

Se parte da zero, po4a-gettextize estrarrà le stringhe traducibili dalla documentazione e scriverà un file POT. Se si fornisce un file tradotto già esistente con il flag -l, po4a-gettextize proverà a usare le traduzioni che contiene nel file PO prodotto. Questo processo rimane noioso e manuale, come spiegato più avanti nella sezione "Conversione di una traduzione manuale in po4a".

Se il documento master contiene dei caratteri non ASCII, il file PO generato sarà in UTF-8. Altrimenti (se il documento master è completamente in ASCII), il PO userà la codifica del documento tradotto in ingresso, o UTF-8 se non viene fornito alcun documento.

OPZIONI

Formato del documento in questione. L'opzione --help-format mostra l'elenco dei formati disponibili.
Il file contenente il documento master da tradurre. Si può usare questa opzione più volte se si vuole "gettext-izzare" più documenti.
Set di caratteri del file contenente il documento da tradurre.
Il file contenente la versione localizzata (tradotta) del documento. Se si hanno più documenti master, è probabile si voglia anche fornire più documenti localizzati usando quest'opzione più di una volta.
Set di caratteri del file contenente il documento tradotto.
File su cui scrivere il catalogo messaggi. Se non specificato, il catalogo messaggi viene scritto sullo standard output.
Opzioni extra da passare al plugin di formato. Vedere la documentazione per ogni plugin per ulteriori informazioni sulle opzioni valide e sul loro significato. Per esempio si può passare "-o tablecells" al parser AsciiDoc mentre il parser di testo semplice accetta "-o tabs=split".
Mostra un breve messaggio di aiuto.
Elenca i formati di documento gestiti da po4a.

= item -k --keep-temps

Mantiene il master temporaneo e i file POT localizzati creati prima della fusione. Può essere utile per capire perché questi file vengono desincronizzati, causando i problemi di gettex-tizzazione

Mostra la versione del programma ed esce.
Rende il programma più prolisso.
Mostra delle informazioni di debug
Imposta l'indirizzo a cui inviare i rapporti di errore per i msgid. Come impostazione predefinita, i file POT creati non hanno campi Report-Msgid-Bugs-To.
Imposta l'intestatario del copyright nell'intestazione del POT. Il valore predefinito è "Free Software Foundation, Inc."
Imposta il nome del pacchetto nell'intestazione del POT. Il valore predefinito è "PACKAGE".
Imposta la versione del pacchetto nell'intestazione del POT. Il valore predefinito è "VERSION".

Convertire la traduzione di un manuale a po4a

po4a-gettextize cercherà di estrarre il contenuto di qualunque file di traduzione gli venga fornito, ed usare questo contenuto come voci msgstr nel file PO prodotto. Si osservi che tale processo è molto fragile: esso si basa sulla supposizione che la stringa in posizione N nel file tradotto corrisponda alla stringa di posizione N nel file originale. Ciò naturalmente non funzionerà se i file non condividono esattamente la stessa struttura.

Internamente, ogni parser po4a riporta il tipo di sintassi di ogni stringa estratta. Questo è il modo in cui la desincronizzazione viene rilevata durante la fase di gettext-izzazione. Per esempio, se i file hanno la seguente struttura, è molto improbabile che la quarta stringa nella traduzione (di tipo 'capitolo') sia la traduzione della quarta stringa nell'originale (di tipo 'paragrafo'), o che due paragrafi originali vengano fusi assieme nella traduzione.

    Originale        Traduzione
  capitolo           capitolo
    paragrafo          paragrafo
    paragrafo          paragrafo
    paragrafo        chapter
  capitolo             paragrafo
    paragrafo          paragrafo

po4a-gettextize diagnostica in modo prolisso qualsiasi desincronizzazione della struttura rilevata. Quando ciò accade, è necessario modificare manualmente i file (ciò probabilmente richiede avere alcune nozioni sulla lingua di destinazione). È necessario aggiungere paragrafi falsi o rimuovere alcuni contenuti in uno dei documenti (o entrambi) per correggere le disparità segnalate, fino a quando la struttura di entrambi i documenti non corrisponde perfettamente. Alcuni trucchi sono forniti nella sezione successiva.

Anche quando il documento viene elaborato correttamente, sono ancora possibili disparità non rilevate ed errori silenziosi. Questo è il motivo per cui qualsiasi traduzione associata automaticamente da po4a-gettextize viene contrassegnata come fuzzy per richiedere un'ispezione manuale. È necessario verificare che ogni msgstr recuperato sia effettivamente la traduzione del msgid associato e non la stringa prima o dopo.

Come si può vedere, è fondamentale avere la stessa identica struttura nel documento tradotto e in quello originale. La cosa migliore è eseguire la "gettext-izzazione" sulla versione esatta di master.doc utilizzata per la traduzione e aggiornare il file PO rispetto al file master più recente solo una volta che la "gettext-izzazione" abbia avuto successo.

Se si è abbastanza fortunati da avere le strutture di entrambi i documenti che combaciano perfettamente, si lavorerà senza intoppi e si otterranno risultati in pochi secondi. Altrimenti, si scoprirà perché questo processo ha un nome così brutto, e sarà meglio essere preparati ad un bel po' di lavoro. In ogni caso, è meglio ricordarsi che è il prezzo da pagare per ottenere in seguito la comodità di po4a. Una volta fatta la conversione, la sincronizzazione tra documenti master e le loro traduzioni sarà per sempre completamente automatica.

Anche se le cose dovessero andare male, la gettext-izzazione rimane molto più veloce che tradurre tutto nuovamente. Sono stato in grado di gettext-izzare l'esistente traduzione francese della documentazione Perl in un giorno, anche se la struttura di molti documenti era desincronizzata (2 milioni di caratteri): ripartire con una traduzione da zero avrebbe richiesto dei mesi di lavoro.

Suggerimenti e trucchi per il processo di gettext-izzazione

La gettextization si interrompe non appena viene rilevata una desincronizzazione. In teoria, dovrebbe probabilmente essere possibile risincronizzare la "gettext-izzazione" più avanti nei documenti usando ad es. lo stesso algoritmo di diff(1). Ma un intervento manuale sarebbe comunque obbligatorio per abbinare manualmente gli elementi che non possono essere abbinati automaticamente, spiegando perché la risincronizzazione automatica non è stata implementata (ancora?).

Quando ciò accade, il succo del lavoro consiste nel riallineare la struttura di questi file tramide modifiche manuali. Quando accade, po4a-gettextize è piuttosto prolisso nel descrivere cosa non ha funzionato. Indica le stringhe che non corrispondono, la loro posizione nel testo, e il tipo di ognuna di esse. Inoltre, il file PO generato fin lì verrà scaricato in gettextization.failed.po per consentirne l'analisi.

Ecco alcuni altri trucchi per alleviare in questo noioso lavoro:

  • Rimuovere tutto il contenuto extra delle traduzioni, come per esempio la sezione riconoscimenti ai traduttori. Le si potranno riaggiungere in po4a in seguito, usando un'addenda (vedere po4a(7)).
  • Se è necessario modificare i file per allineare le loro strutture, è preferibile modificare la traduzione, se possibile. Infatti, se le modifiche all'originale sono troppo invadenti, la vecchia e la nuova versione non verranno abbinate durante l'aggiornamento del PO e la traduzione corrispondente verrà comunque scaricata. Ma non si esitati a modificare anche il documento originale, se necessario: l'importante è ottenere un primo file PO con cui iniziare.
  • Non fatevi problemi a eliminare qualsiasi contenuto originale che non esisterebbe nella versione tradotta. Questo contenuto verrà reintrodotto automaticamente in seguito, durante la sincronizzazione del file PO con il documento.
  • Si dovrebbe probabilmente informare l'autore originale di ogni cambiamento strutturale nella traduzione che sembra giustificato. Se ci sono problemi nell'originale, bisogna informarne l'autore. La correzione nella traduzione corregge solo per una parte della comunità. Inoltre è in pratica impossibile quando si usa po4a ;).
  • A volte, il contenuto dei paragrafi corrisponde, ma i loro tipi no. La correzione è abbastanza dipendente dal formato. Nel POD e nelle pagine man, spesso deriva dal fatto che uno dei due paragrafi contiene una riga che inizia con uno spazio bianco mentre l'altro paragrafo no. In quei formati, tali paragrafi non possono essere mandati a capo e quindi diventare di un tipo diverso. In tal caso basta rimuovere lo spazio e si è a posto. Alle volte si tratta anche di un semplice refuso nel nome del marcatore XML.

    Allo stesso modo, due paragrafi possono venire uniti assieme nel POD quando la riga di separazione contiene alcuni spazi, o quando non c'è una riga vuota tra la riga =elemento e il contenuto dell'elemento stesso.

  • A volte, il messaggio di desincronizzazione sembra strano perché la traduzione viene collegata al paragrafo originale sbagliato. È il segno di problema non rilevato prima nel processo. Controllare gettextization.failed.po per vedere quando inizia veramente il problema e correggerlo dov'è effettivamente.
  • In some case, po4a adds a space at the end of either the original or the translated strings. This is because every string must be deduplicated during the gettextize process. Imagine that a string appearing several times unmodified in the original, but is translated in differing way, or that different paragraphs are translated in the exact same way.

    Without deduplication, such case would break the gettexization algorithm, as it is a simple one to one pairing between the msgids of both the master and the localized files. Since one of the PO files would miss an entry (that would be reported as duplicate, with two references), the pairing would fail.

    Since po4a uses the entry type ("title" or "plain paragraph", etc) to detect whether the parsing streams got desynchronized, similar issues could occur if two identical entries (same content but differing type) of the master file are translated in the exact same way in the localized file. po4a would detect a fake desyncronization in such case.

    In most cases, the extra space added by po4a to deduplicate the strings has no impact on the formatting. Strings are fuzzied anyway, and msgmerge will probably match the strings accordingly afterward.

  • Come nota finale, non siate troppo sorpresi se la prima sincronizzazione del file PO richiede molto tempo. Questo perché la maggior parte del msgid del file PO risultante dalla "gettext-izzazione" non corrisponde esattamente a nessun elemento del file POT creato dai file master recenti. Questo costringe gettext a cercare quello più vicino utilizzando un pesante algoritmo di prossimità di stringhe.

    Ad esempio, il primo po4a-updatepo della traduzione francese della documentazione Perl (file PO da 5,5 MB) ha impiegato circa 48 ore (sì, due giorni) mentre i successivi solo una dozzina di secondi.

VEDERE ANCHE

po4a(1), po4a-normalize(1), po4a-translate(1), po4a-updatepo(1), po4a(7).

AUTORI

 Denis Barbier <barbier@linuxfr.org>
 Nicolas Francois <nicolas.francois@centraliens.net>
 Martin Quinson (mquinson#debian.org)

TRADUZIONE

 Danilo Piazzalunga <danilopiazza@libero.it>
 Marco Ciampa <ciampix@posteo.net>

COPYRIGHT E LICENZA

Copyright 2002-2020 by SPI, inc.

Questo programma è software libero; è lecito ridistribuirlo o modificarlo secondo i termini della licenza GPL (vedere il file COPYING).

2022-07-15 Strumenti Po4a