.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "LOCALE::PO4A::SGML.3PM 1" .TH LOCALE::PO4A::SGML.3PM 1 2025-11-22 "perl v5.42.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NOME .IX Header "NOME" Locale::Po4a::Sgml \- converte documentos SGML de/para ficheiros PO .SH DESCRIÇÃO .IX Header "DESCRIÇÃO" O objetivo do projeto po4a (PO for anything: PO para qualquer coisa) é facilitar traduções (e o mais interessante, a manutenção das traduções) a usar as ferramentas do gettext em áreas em que não se esperava, como na documentação. .PP Locale::Po4a::Sgml é um módulo para ajudar a tradução da documentação no formato SGML em outros idiomas [humanos]. .PP Este módulo usa \fBonsgmls\fR(1) para analisar os ficheiros SGML. Certifique\-se de que é instalado. Certifique\-se também de que o DTD dos ficheiros SGML está instalado no sistema. .SH "OPÇÕES ACEITES POR ESTE MÓDULO" .IX Header "OPÇÕES ACEITES POR ESTE MÓDULO" .IP \fBdebug\fR 4 .IX Item "debug" Lista de palavras\-chave separadas por espaços que indicam qual categoria de mensagens de depuração extras deve ser mostrada. Os valores possíveis são: \&\f(CW\*(C`entities\*(C'\fR, \f(CW\*(C`generic\*(C'\fR, \f(CW\*(C`onsgml\*(C'\fR, \f(CW\*(C`refs\*(C'\fR e \f(CW\*(C`tag\*(C'\fR. .IP \fBverbose\fR 4 .IX Item "verbose" Dá mais informações sobre o que está a acontecer. .IP \fBtranslate\fR 4 .IX Item "translate" Lista separada por espaços das marcações extras (além daquelas fornecidas por DTD) cujo conteúdo deveria formar um msgid extra, isto é, deveria ser traduzido. .IP \fBsection\fR 4 .IX Item "section" Lista separada por espaços das marcações extras (além daquelas fornecidas por DTD) contendo outras marcações, algumas delas sendo da categoria \&\fBtranslate\fR. .IP \fBindent\fR 4 .IX Item "indent" Lista separada por espaços de marcações que aumentam o nível de indentação. Isso afetará a indentação no documento resultante. .IP \fBverbatim\fR 4 .IX Item "verbatim" A apresentação dentro dessas marcas não deve ser alterada. Este parágrafo não vai ficar envolvido e não há espaço de recuo adicional ou nova linha será adicionada para finalidade estética. .IP \fBempty\fR 4 .IX Item "empty" Etiquetas que não precisam ser fechadas. .IP \fBignore\fR 4 .IX Item "ignore" Etiquetas ignoradas e consideradas como simples dados de caracteres pelo po4a. Isso quer dizer que elas podem ser parte de um identificador de mensagem. Por exemplo, é um bom candidato para esta categoria pois pô\-lo na secção \fBtranslate\fR criaria identificadores de mensagens com apenas o seu conteúdo, (e geralmente não são frases inteiras), o que é mau. .IP \fBattributes\fR 4 .IX Item "attributes" Uma lista separada por espaços de atributos que precisam ser traduzidos. Pode especificar os atributos pelos seus nomes (por exemplo, \&\f(CW\*(C`lang\*(C'\fR), mas também pode prefixá\-la com uma hierarquia de etiquetas, para especificar que este atributo só será traduzido quando estiver na etiqueta especificada. Por exemplo: \f(CW\*(C`lang\*(C'\fR especifica que o atributo lang só será traduzido se ele estiver numa etiqueta \f(CW\*(C`\*(C'\fR, que está numa etiqueta \f(CW\*(C`\*(C'\fR. Os nomes de etiquetas são, na verdade, expressões regulares, de forma que também pode escrever coisas como \f(CW\*(C`lang\*(C'\fR para traduzir apenas atributos \f(CW\*(C`lang\*(C'\fR que estão numa etiqueta \f(CW\*(C`\*(C'\fR ou uma etiqueta \f(CW\*(C`\*(C'\fR. .IP \fBqualify\fR 4 .IX Item "qualify" Uma lista separada por espaços de atributos para os quais a tradução deve ser qualificada pelo nome do atributo, isto é, o texto extraído para a tradução incluirá o nome e o valor do atributo. Por exemplo, para uma etiqueta como \f(CW\*(C`\*(C'\fR os tradutores receberão a cadeia \&\f(CW\*(C`lang_en="foo"\*(C'\fR. Observe que isto também adiciona automaticamente o atributo fornecido à lista \fBattributes\fR. .IP \fBforce\fR 4 .IX Item "force" Continua mesmo na eventualidade do DTD ser desconhecido ou se \fBonsgmls\fR encontrar erros no ficheiro de entrada. .IP \fBinclude\-all\fR 4 .IX Item "include-all" Por predefinição, msgids que contenham apenas uma entidade (como \&\f(CW\*(C`&version;\*(C'\fR) são ignorados para o conforto dos tradutores. Ao ativar esta opção previne\-se esta otimização. Ela pode ser útil se a documentação conter uma construção como \f(CW\*(C`Á\*(C'\fR, mesmo duvidando que este tipo de coisa venha a acontecer... .IP \fBignore\-inclusion\fR 4 .IX Item "ignore-inclusion" Lista separada por espaços de entidades que não serão embutidas. Use esta opção com cuidado: ela pode levar o \fBonsgmls\fR (usado internamente) a adicionar etiquetas e invalidar o documento resultante. .SH "ESTADO DESTE MÓDULO" .IX Header "ESTADO DESTE MÓDULO" O resultado é perfeito. Isto é, os documentos gerados são exatamente os mesmos que os originais. Mas ainda há alguns problemas: .IP \(bu 2 A saída de erro do \fBonsgmls\fR é redirecionada para /dev/null por predefinição, o que obviamente é ruim. Não sei como evitar isso. .Sp O problema é que tenho que "proteger" as inclusões condicionais (i.e. as \&\f(CW\*(C`\*(C'\fR) do \fBonsgmls\fR. Caso contrário, \fBonsgmls\fR devora\-as e não sei como restaurá\-las no documento final. Para evitar isso, reescrevo\-as para \f(CW\*(C`{PO4A\-beg\-foo}\*(C'\fR e \f(CW\*(C`{PO4A\-end}\*(C'\fR. .Sp O problema com isso é que o \f(CW\*(C`{PO4A\-end}\*(C'\fR e outros que acrescento, são inválidos no documento (não numa etiqueta

ou semelhante). .Sp Se quiser ver a saída do \fBonsgmls\fR, adicione o seguinte à sua linha de comandos (ou linha de configuração po4a): .Sp .Vb 1 \& \-o debug=onsgmls .Ve .IP \(bu 2 Ele funciona apenas com o DebianDoc e DocBook DTD. Adicionar suporte para um novo DTD deve ser muito fácil. O mecanismo é o mesmo para cada DTD, só tem que dar uma lista das etiquetas existentes e algumas das suas características. .Sp Concordo. apenas necessita mais documentação, no entanto pode ser considerado como beta e detesto conteúdos de documentos que podem ainda ser sujeitos a alterações. .IP \(bu 2 Aviso, o suporte para DTDs é bastante experimental. Não li nenhum manual de referência para encontrar a definição de cada etiqueta. Adicionei a definição de etiqueta para o módulo, até que funciona para alguns documentos que eu encontrei na Internet. Se o documento usar mais etiquetas do que as minhas, não vai funcionar. Mas como eu disse acima, reparar isto deve ser muito fácil. .Sp Testei DocBook contra o SAG (Guia do Administrador do Sistema), mas também este documento é muito grande e deve usar mais especificidades do DocBook. .Sp Para DebianDoc, testei alguns dos manuais da DDP, mas não todos ainda. .IP \(bu 2 Em caso de inclusão de ficheiros, a cadeia de referência de mensagens em ficheiros PO (ou seja, linhas como \f(CW\*(C`#: en/titletoc.sgml:9460\*(C'\fR) vai estar errada. .Sp Isto porque eu pré\-processei o ficheiro para proteger a inclusão condicional (i.e. aqueles \f(CW\*(C`\*(C'\fR) e algumas entidades (como \&\f(CW\*(C`&version;\*(C'\fR) do \fBonsgmls\fR porque quero eles verbatim no documento gerado. Para isto, faço uma cópia temporária do ficheiro de entrada e faço todas as alterações que quero nele antes de passá\-lo para o \fBonsgmls\fR para análise. .Sp Assim ele funciona, substituí as entidades que pedem a inclusão de ficheiros pelo conteúdo do ficheiro de dados (para que possa proteger também o que precisa de estar num sub\-ficheiro também). Mas nada se fez até agora para corrigir as referências (ou seja o nome do ficheiro e o número da linha) mais tarde. Não tenho certeza qual é a melhor coisa a fazer. .SH AUTORES .IX Header "AUTORES" Este módulo é uma versão adaptada do \*(Aqsgmlspl\*(Aq (pós\-processador SGML para os analisadores SGMLS e ONSGMLS) que foi: .PP .Vb 1 \& Copyright © 1995 David Megginson .Ve .PP A adaptação para po4a foi feita por: .PP .Vb 2 \& Denis Barbier \& Martin Quinson (mquinson#debian.org) .Ve .SH "DIREITOS DE AUTOR E LICENÇA" .IX Header "DIREITOS DE AUTOR E LICENÇA" .Vb 2 \& Copyright © 1995 David Megginson . \& Copyright © 2002\-2005 SPI, Inc. .Ve .PP Este programa é um software livre; pode redistribuí\-lo e/ou modificá\-lo sob os termos da GPL v2.0 ou posterior (veja o ficheiro COPYING).