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

-f, --format
    Formato del documento in questione. L'opzione --help-format mostra l'elenco dei formati disponibili.

-m, --master
    Il file contenente il documento master da tradurre. Si può usare questa opzione più volte se si vuole "gettext-izzare" più documenti.

-M, --master-charset
    Set di caratteri del file contenente il documento da tradurre.

-l, --localized
    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.

-L, --localized-charset
    Set di caratteri del file contenente il documento tradotto.

-p, --po
    File su cui scrivere il catalogo messaggi. Se non specificato, il catalogo messaggi viene scritto sullo standard output.

-o, --option
    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".

-h, --help
    Mostra un breve messaggio di aiuto.

--help-format
    Elenca i formati di documento gestiti da po4a.

-V, --version
    Mostra la versione del programma ed esce.

-v, --verbose
    Rende il programma più prolisso.

-d, --debug
    Mostra delle informazioni di debug

--msgid-bugs-address indirizzo@email
    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.

--copyright-holder stringa
    Imposta l'intestatario del copyright nell'intestazione del POT. Il valore predefinito è "Free Software Foundation, Inc."

--package-name stringa
    Imposta il nome del pacchetto nell'intestazione del POT. Il valore predefinito è "PACKAGE".

--package-version stringa
    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.

•   Con alcune impostazioni sfortunate, si ha forte sospetto che po4a abbia mangiato alcune parti del testo, nell'originale o nella traduzione. gettextization.failed.po indica che entrambi i file corrispondevano, come previsto, fino al paragrafo N. Ma poi, è stato effettuato un tentativo (fallito) di abbinare il paragrafo N+1 nel file originale non con il paragrafo N+1 nella traduzione come avrebbe dovuto, ma con il paragrafo N+2. Come se il paragrafo N+1 che vedi nel documento fosse semplicemente scomparso nel processo.

    Questa sfortunata situazione si verifica quando uno stesso paragrafo si ripete più volte nel documento. In questo caso nel file PO non viene creata nessuna voce aggiuntiva, ma viene invece aggiunto un nuovo riferimento all'esistente.

    Quindi, la situazione precedente si verifica quando due paragrafi simili ma diversi vengono tradotti nello stesso identico modo. Apparentemente questo rimuoverà un paragrafo della traduzione. Per risolvere il problema, è sufficiente modificare leggermente una delle traduzioni nel documento. Se lo si preferisce si può anche eliminare il secondo paragrafo nel documento originale.

    All'opposto, se lo stesso paragrafo che appare due volte nel documento originale non viene tradotto allo stesso modo in entrambe le posizioni, si avrà la sensazione che un paragrafo dell'originale sia scomparso. Per risolvere il problema basta copiare la migliore traduzione sopra l'altra nel documento tradotto.

•   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 François <nicolas.francois@centraliens.net>
 Martin Quinson (mquinson#debian.org)

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

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).