Locale::Po4a::Sgml - converte documenti SGML da/a file PO
L'obiettivo del progetto po4a (PO per tutto) è di
facilitare le traduzioni (e cosa più interessante, la manutenzione
delle traduzioni) usando gli strumenti associati a gettext in aree
inaspettate come la documentazione.
Locale::Po4a::Sgml è un modulo che aiuta la traduzione in
altre lingue della documentazione in formato SGML.
Questo modulo usa onsgmls(1) per analizzare i file SGML.
Assicurati che sia installato. Assicurati anche che i DTD dei file SGML
siano installati nel sistema.
- debug
- Elenco di parole chiave, separate da spazi, indicanti le categorie di
messaggi extra da mostrare a scopo diagnostico. I valori ammessi sono:
"entities",
"generic",
"onsgml",
"refs" e
"tag".
- verbose
- Mostra più informazioni su quello che sta accadendo.
- translate
- Elenco separato da spazi di tag extra (oltre a quelli forniti dalla DTD)
il cui contenuto dovrebbe formare un msgstr in più, cioè che
dovrebbe essere tradotto.
- section
- Elenco separato da spazi di tag extra (oltre a quelli forniti dalla DTD)
contenenti altri tag, alcuni dei quali sono di categoria
translate.
- indent
- Elenco separato da spazi di tag che aumentano il livello di indentazione.
Ciò influenzerà l'indentazione nel documento
risultante.
- verbatim
- Il layout all'interno di questi tag non deve essere modificato: i
paragrafi non verranno mandati a capo, non verrà aumentata
l'indentazione né verranno aggiunte nuove linee per ragioni
estetiche.
- empty
- Tag che non è necessario chiudere.
- ignore
- Tag ignorati e considerati come testo semplice da po4a, vale a dire che
possono far parte di un msgid. Ad esempio, <b> è un buon
candidato per questa categoria dato che metterlo nella sezione
translate darebbe luogo a dei msgid contenenti solo il suo
contenuto (e normalmente non sono frasi complete), condizione non
ideale.
- attributes
- Un elenco di attributi separati da spazi che devono essere tradotti.
È possibile specificare gli attributi in base al loro nome (ad
esempio, "lang"), ma è anche
possibile anteporre una gerarchia di tag, per specificare che questo
attributo verrà tradotto solo quando si trova nel tag specificato.
Ad esempio: "<bbb><aaa>lang"
specifica che l'attributo lang verrà tradotto solo se si trova in
un tag "<aaa>", che è in un
tag "<bbb>". I nomi dei tag sono
in realtà espressioni regolari, quindi si possono anche scrivere
cose come "<aaa|bbb>lang" per
tradurre solo attributi lang che sono nei tag
"<aaa>" o
"<bbb>".
- qualify
- Un elenco di attributi separati da spazi per i quali la traduzione deve
essere qualificata dal nome dell'attributo, ovvero il testo estratto per
la traduzione includerà sia il nome dell'attributo che il suo
valore, ad es. per un tag come "<aaa
lang_en="foo">" ai traduttori verrà
presentata la stringa
"lang_en="foo"". Si noti che
questa impostazione aggiunge automaticamente l'attributo dato anche
nell'elenco attributes.
- force
- Procede anche se il DTD è sconosciuto o se onsgmls trova
errori nel file in ingresso.
- include-all
- I msgid che contengono solo un'entità (come
"&version;") vengono saltati per
comodità del traduttore. Attivare questa opzione impedisce questa
ottimizzazione. Può essere utile se il documento contiene una
costruzione del tipo
"<title>Á</title>",
anche se è difficile possa succedere...
- ignore-inclusion
- Elenco separato da spazi di entità che non saranno accodate. Usare
quest'opzione con cautela: può provocare in onsgmls (usato
internamente) l'aggiunta di tag ed invalidare così il documento in
uscita.
Il risultato è perfetto, ossia i documenti generati sono
identici. Rimane però ancora qualche problema:
- Gli errori scritti in uscita da onsgmls vengono rediretti in
maniera predefinita su /dev/null, il che è chiaramente sbagliato,
ma non si sa come fare per evitarlo.
Il problema è che bisogna "proteggere"
l'inclusione condizionale (cioè i vari
"<! [ %foo [" e
"]]>") da onsgmls.
Altrimenti onsgmls se li mangia e non si sa come fare per farli
ricomparire nel documento finale. Per impedirlo, li si riscrivono come
"{PO4A-beg-foo}" e
"{PO4A-end}".
Il problema con questo approccio è che i vari
"{PO4A-end}" che aggiungo non sono
validi nel documento (non in un tag <p> o simili).
Se si vuole visualizzare l'uscita di onsgmls,
aggiungere quanto segue alla riga di comando (o alla riga di
configurazione di po4a):
-o debug=onsgmls
- Funziona solo con i DTD DebianDoc e DocBook. Aggiungere supporto per un
nuovo dtd dovrebbe essere molto facile. Il meccanismo è lo stesso
per ogni DTD, basta soltanto fornire l'elenco dei tag esistenti e alcune
delle loro caratteristiche.
Sono d'accordo, avrebbe bisogno di maggiore documentazione, ma
è ancora considerato in fase di beta, e detesto documentare
qualcosa che potrebbe venir modificato in seguito.
- Attenzione, il supporto per i DTD è piuttosto sperimentale. Non ho
letto nessun manuale di riferimento per trovare le definizioni di tutti i
tag. Ho aggiunto definizioni dei tag al modulo finché non ha
funzionato per qualche documento che ho trovato in rete. Non
funzionerà se il documento fornito usa più tag del mio. Ma,
come ho appena detto, sistemarlo dovrebbe essere davvero facile.
Ho testato DocBook soltanto con SAG (acronimo di System
Administrator Guide, la famosa Guida degli amministratori di sistema di
Linux), ma si tratta di un documento piuttosto grosso, e dovrebbe usare
gran parte delle caratteristiche di DocBook.
Per quanto riguarda DebianDoc, ho testato qualche manuale del
DDP, ma non ancora tutti.
- Nel caso in cui si includano file, i riferimenti ai messaggi nei file po
(cioè le righe del tipo "#:
en/titletoc.sgml:9460") risulteranno sbagliati.
Questo perché prima il file viene pre-elaborato per
proteggere l'inclusione condizionale (cioè i vari
"<! [ %foo [" e
"]]>") e qualche entità
(come "&version;") da
onsgmls perché le si vuole così come sono nel
documento generato. Per questo motivo, faccio una copia temporanea del
file di ingresso e applico alla copia tutte le modifiche che voglio
prima di sottoporlo all'analisi di onsgmls.
Per far sì che funzioni, sostituisco le entità
che richiedono l'inclusione di un file con il contenuto del file dato
(così posso proteggere anche ciò che si deve trovare anche
nei sotto-file). Ma nulla viene fatto fin'ora per correggere i
riferimenti (cioè i nomi dei file e i numeri di riga)
successivamente. Non sono sicuro di quale sia la cosa migliore da
fare.
Questo modulo è un adattamento di sgmlspl, (un
postprocessore SGML per il parser ONSGMLS) che era:
Copyright © 1995 by David Megginson <dmeggins@aix1.uottawa.ca>
Adattato per po4a da:
Denis Barbier <barbier@linuxfr.org>
Martin Quinson (mquinson#debian.org)
Danilo Piazzalunga <danilopiazza@libero.it>
Marco Ciampa <ciampix@posteo.net>
Copyright © 1995 by David Megginson <dmeggins@aix1.uottawa.ca>
Copyright © 2002-2005 by SPI, inc.
Questo programma è software libero; è lecito
ridistribuirlo o modificarlo secondo i termini della licenza GPL v2.0 o
successive (vedere il file COPYING).