.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.43) .\" .\" 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 .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . 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 .\" ======================================================================== .\" .IX Title "Locale::Po4a::Man 3pm" .TH Locale::Po4a::Man 3pm "2023-01-03" "Ferramentas do Po4a" "Ferramentas do Po4a" .\" 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::Man \- converte páginas de manual de/para arquivos \s-1PO\s0 .SH "DESCRIÇÃO" .IX Header "DESCRIÇÃO" O objetivo do projeto po4a (\s-1PO\s0 for anything, ou \s-1PO\s0 para qualquer coisa) é facilitar traduções (e o mais interessante, a manutenção das traduções) usando as ferramentas do gettext em áreas em que não se esperava, como documentação. .PP Locale::Po4a::Man é um módulo para ajudar a tradução de documentação no formato nroff (o idioma das páginas de manual) para outros idiomas. .SH "TRADUZINDO COM PO4A::MAN" .IX Header "TRADUZINDO COM PO4A::MAN" Este módulo tenta com muito esforço tornar a vida do tradutor mais fácil. Para isso, o texto apresentado para os tradutores não é uma cópia exata do texto encontrado na página de manual. Exatamente: as partes mais cruas do formato nroff são ocultadas de forma que os tradutores não possam se complicar com elas. .SS "Dimensionamento de texto" .IX Subsection "Dimensionamento de texto" Parágrafos sem recuo são automaticamente redimensionados para o tradutor. Isso pode levar a alguma pequena diferença no resultado gerado, já que regras de redimensionamento usadas pelo groff não são muito claras. Por exemplo, dois espaços após um parêntese é mantido em alguns casos. .PP De qualquer forma, a diferença será apenas sobre a posição de espaços extras em parágrafos dimensionados, e eu acho que isso vale a pena. .SS "Especificação de fonte" .IX Subsection "Especificação de fonte" A primeira alteração é sobre especificação de alteração de fontes. No nroff, há várias formas de especificar se uma palavra fornecida deveria ser escrita diminuída, negrito ou itálico. No texto para traduzir, há apenas uma forma, emprestada do formato \s-1POD\s0 (documentação on-line do Perl): .IP "I \*(-- texto em itálico" 4 .IX Item "I texto em itálico" equivalente a \efItexto\efP ou \*(L".I texto\*(R" .IP "B \*(-- texto em negrito" 4 .IX Item "B texto em negrito" equivalente a \efBtexto\efP or \*(L".B texto\*(R" .IP "R \*(-- texto em romano" 4 .IX Item "R texto em romano" equivalente a \efRtexto\efP .IP "CW \*(-- texto com largura fixa" 4 .IX Item "CW texto com largura fixa" equivalente a \ef(CWtexto\efP ou \*(L".CW texto\*(R" .PP Observação: A opção \s-1CW\s0 não está disponível para todos os dispositivos groff. Não é recomendável usá\-lo. Ele é fornecido para sua conveniência. .SS "Transliteração automática de caracteres" .IX Subsection "Transliteração automática de caracteres" Po4a translitera automaticamente alguns caracteres para facilitar a tradução ou a revisão da tradução. Aqui está a lista de transliterações: .IP "hífenes" 4 .IX Item "hífenes" Sinais de hífenes (\-) e de menos (\e\-) em páginas de manual são todas transliteradas como traços simples (\-) nos arquivos \s-1PO.\s0 Então, todos os traços são transliterados em sinais roff de menos (\e\-) quando a tradução é inserida no documento de saída. .Sp Tradutores podem forçar um hífen usando o glifo \*(L"\e[hy]\*(R" do roff em suas traduções. .IP "espaço rígido" 4 .IX Item "espaço rígido" Tradutores podem usar espaços rígidos (também conhecidos como \*(L"espaços fixos\*(R") em suas traduções. Esses espaços rígidos (0xA0 em latin1) será transliterado para um espaço rígido (\*(L"\e \*(R"). .IP "transliterações de aspas" 4 .IX Item "transliterações de aspas" `` e '' são transliteradas, respectivamente, para \e*(lq e \e*(rq. .Sp Para evitar essas transliterações, os tradutores podem inserir um caractere roff com zero de largura (isto é, usando `\e&` ou '\e&', respectivamente). .ie n .SS "Colocando ""<"" e "">"" nas traduções" .el .SS "Colocando ``<'' e ``>'' nas traduções" .IX Subsection "Colocando < e > nas traduções" Já que esses caracteres são usados para delimitar partes sob modificação de fonte, você não pode usá\-los literalmente. Use E e E em vez disso (como em \s-1POD,\s0 novamente). .SH "OPÇÕES ACEITAS POR ESTE MÓDULO" .IX Header "OPÇÕES ACEITAS POR ESTE MÓDULO" Estas são as opções específicas deste módulo: .IP "\fBdebug\fR" 4 .IX Item "debug" Ativa depuração em alguns mecanismos internos deste módulo. Use a fonte para saber quais partes podem ser depuradas. .IP "\fBverbose\fR" 4 .IX Item "verbose" Aumenta o nível de detalhamento. .IP "\fBgroff_code\fR" 4 .IX Item "groff_code" Esta opção controla o comportamento do módulo quando ele encontrar uma seção .de, .ie ou .if . Ele pode levar os valores a seguir: .RS 4 .IP "\fIfail\fR" 4 .IX Item "fail" Esse é o valor de padrão. O módulo vai falhar quando uma seção .de, .ie ou .if for encontrada. .IP "\fIverbatim\fR" 4 .IX Item "verbatim" Indica que as seções .de, .ie ou .if devem ser copiadas como estão do original para o documento traduzido. .IP "\fItranslate\fR" 4 .IX Item "translate" Indica que as seções .de, .ie ou .if vão ser propostas para a tradução. Você deveria apenas usar esta opção se uma string de tradução contiver uma dessas seções. Do contrário, \fIverbatim\fR deve ser preferido. .RE .RS 4 .RE .IP "\fBgenerated\fR" 4 .IX Item "generated" Esta opção especifica que o arquivo foi gerado e que po4a não deve tentar detectar se as páginas man foi geral de outro formato. Wata opção é obrigatória para usar po4a em páginas man geradas. Note que traduzir páginas geradas em vez das páginas fonte é geralmente um mais suscetível a erro e, portanto, uma má ideia. .IP "\fBmdoc\fR" 4 .IX Item "mdoc" Esta opção é apenas útil para páginas mdoc. .Sp Ela seleciona um suporte mais estrito ao formato mdoc ao informar po4a que não deve traduzir a seção \*(L"\s-1NAME\*(R".\s0 Páginas mdoc cuja seção \*(L"\s-1NAME\*(R"\s0 está traduzida não vão gerar cabeçalho ou nota de rodapé algum. .Sp De acordo com as páginas do groff_mdoc, as seções \s-1NAME, SYNOPSIS\s0 e \&\s-1DESCRIPTION\s0 são obrigatórias. Não há problemas conhecidos com seções \s-1SYNOPSIS\s0 ou \s-1DESCRIPTION\s0 traduzidas, mas você também pode especificar essas seções desta forma: \-o mdoc=NAME,SYNOPSIS,DESCRIPTION .Sp Esse problema pode ser resolvido com um adendo como este aqui: PO4A\-HEADER:mode=before;position=^.Dd .TH \s-1DOCUMENT_TITLE 1\s0 \*(L"dia mês, ano\*(R" \s-1OS\s0 \*(L"Nome da seção\*(R" .PP The following options specify the behavior of a user-defined macro (with a .de request), or of a classical macro that is not supported by po4a. They take as argument a comma-separated list of macros. For example: .PP .Vb 1 \& \-o noarg=FO,OB,AR \-o translate_joined=BA,ZQ,UX .Ve .PP Nota: se uma macro não tem suporte no po4a e se você considera que é uma macro roff padrão, você deveria enviá\-la para a equipe de desenvolvimento do po4a. .IP "\fBuntranslated\fR" 4 .IX Item "untranslated" \&\fBuntranslated\fR indica que esta macro (em seus argumentos) não deveria ser traduzida. .IP "\fBnoarg\fR" 4 .IX Item "noarg" \&\fBnoarg\fR é como \fBuntranslated\fR, exceto que po4a vai verificar que nenhum argumento é adicionar a esta macro. .IP "\fBtranslate_joined\fR" 4 .IX Item "translate_joined" \&\fBtranslate_joined\fR indica que po4a deve propor a tradução de argumentos da macro. .IP "\fBtranslate_each\fR" 4 .IX Item "translate_each" Com \fBtranslate_each\fR, os argumentos também serão propostos para a tradução, exceto que cada um será traduzido separadamente. .IP "\fBno_wrap\fR" 4 .IX Item "no_wrap" Esta opção leva como argumento uma lista de pares de \fIbegin\fR:\fIend\fR separados por vírgula, onde \fIbegin\fR e \fIend\fR são comandos que delimitam o início e fim de uma seção que não deveria ser redimensionada. .Sp Nota: nenhum teste é feito para assegurar que um comando \fIend\fR corresponde ao seu comando \fIbegin\fR; qualquer comando de finalização termina o modo no_wrap. Se você tem uma macro \fIbegin\fR (respectivamente \fIend\fR) que não possui \fIend\fR (respectivamente \fIbegin\fR), você pode especificar uma \fIend\fR existente (como fi) ou \fIbegin\fR (como nf) como uma contraparte. Essas macros (e seus argumentos) não serão traduzidos. .IP "\fBinline\fR" 4 .IX Item "inline" Esta opção especifica uma lista de macros separadas por vírgula que não podem dividir o parágrafo atual. A string a ser traduzida vai, então, conter \fIfoo <.bar baz qux> quux\fR, sendo \fIbar\fR o comando que deveria ser embutido, e \fIbaz qux\fR seus argumentos. .IP "\fBunknown_macros\fR" 4 .IX Item "unknown_macros" Esta opção indica como po4a deveria se comportar quando uma macro desconhecida é encontrada. Por padrão, po4a falha com um aviso. Ele pode levar os valores a seguir: \fBfailed\fR (o valor padrão), \fBuntranslated\fR, \fBnoarg\fR, \fBtranslate_joined\fR ou \fBtranslate_each\fR (veja acima uma explicação para cada um desses valores). .SH "CRIAÇÃO DE PÁGINAS MAN COMPATÍVEIS COM PO4A::MAN" .IX Header "CRIAÇÃO DE PÁGINAS MAN COMPATÍVEIS COM PO4A::MAN" Este módulo ainda é bem limitado, e sempre será, pois ele não é um interpretador nroff de verdade. Seria possível criar um interpretador nroff para permitir que autores usem todas as macros existentes ou até mesmo definir novas em suas páginas, mas nós não queríamos. Seria muito difícil e nós entendemos não haver necessidade. Nós pensamos que se os autores de páginas man desejam ver seus produtos traduzidos, eles podem ter que adaptar para facilitar o trabalho dos tradutores. .PP Então, o analisador de manuais implementado no po4a possui algumas limitações conhecidas que nós não exatamente estamos podendo corrigir e que podem ser buracos a serem evitados se você não quiser ver tradutores tomando conta da sua documentação. .SS "Não programe em nroff" .IX Subsection "Não programe em nroff" nroff é uma linguagem de programação completa, com definição de macros, condicionais e por aí vai. Já que este analisador não é um interpretador nroff com todas suas funcionalidades, ela vai falhar em páginas usando essas capacidades (Há cerca de 200 de tais páginas no meu computador). .SS "Uso o conjunto de macros simples" .IX Subsection "Uso o conjunto de macros simples" Há ainda algumas macros que não encontram suporte no po4a::man. Isso porque eu não consegui encontrar qualquer documentação sobre elas. Aqui está a lista de macros sem suporte, usadas na minha máquina. Note que essa lista não é exaustiva, já que o programa falha na primeira macro sem suporte encontrada. Se você não possui qualquer informação sobre algumas dessas macros, ficarei feliz em adicionar suporte a elas. Por causa dessas macros, cerca de 250 páginas estão inacessíveis para po4a::man. .PP .Vb 11 \& .. ." .AT .b .bank \& .BE ..br .Bu .BUGS .BY \& .ce .dbmmanage .do .En \& .EP .EX .Fi .hw .i \& .Id .l .LO .mf \& .N .na .NF .nh .nl \& .Nm .ns .NXR .OPTIONS .PB \& .pp .PR .PRE .PU .REq \& .RH .rn .S< .sh .SI \& .splitfont .Sx .T .TF .The \& .TT .UC .ul .Vb .zZ .Ve .SS "Ocultando texto dopo4a" .IX Subsection "Ocultando texto dopo4a" Algumas vezes, o autor sabe que algumas partes não são traduzíveis e, portanto, não deveriam ser extraídas pelo po4a. Por exemplo, uma opção pode aceitar um argumento \fIother\fR e \fIother\fR também pode aparecer como o último item de uma lista. No primeiro caso, \fIother\fR não deveria ser traduzível. e no segundo caso, \fIother\fR deveria ser traduzido. .PP Neste aso, o autor pode evitar que po4a extraia algumas strings usando alguns constructs especiais do groff: .PP .Vb 1 \& .if !\*(Aqpo4a\*(Aqhide\*(Aq .B other .Ve .PP (isto vai exibir a opção \fB\-o groff_code=verbatim\fR) .PP Uma nova macro também pode ser definida para automatizar isso: .de IR_untranslated . \s-1IR\s0 \e\e$@ .. .PP .Vb 1 \& .IR_untranslated \e\-q ", " \e\-\e\-quiet .Ve .PP (Isto vai exigir as opções \fB\-o groff_code=verbatim\fR e \fB\-o untranslated=IR_untranslated\fR; com este construct, a condicional \fB.if !'po4a'hide'\fR não é estritamente necessária já que po4a não vai analisar o interno da definição de macro) .PP ou usando o alias: .als IR_untranslated \s-1IR\s0 .PP .Vb 1 \& .IR_untranslated \e\-q ", " \e\-\e\-quiet .Ve .PP Isto vai exigir a opção \fB\-o untranslated=als,IR_untranslated\fR. .SS "Conclusão" .IX Subsection "Conclusão" Para resumir esta seção, mantenha simples e não tente ser esperto ao criar suas páginas man. Muitas coisas são possível no nroff, mas que não têm suporte neste analisador. Por exemplo, não tente bagunçar o \ec interrompendo o processamento de texto (como 40 páginas na minha máquina fazem). Ou, certifique-se de que colocar os argumentos de macros na mesma linha da própria macro. Eu se que é válido no nroff, mas complicado demais para o analisador lidar. .PP É claro, outra possibilidade é usar outro formato, mais amigável ao tradutor (como \s-1POD\s0 usando po4a::pod ou um da família \s-1XML\s0 como o \s-1SGML\s0), mas graças ao po4a::man isso não é mais necessário. Tendo dito isso, se o formato fonte da documentação é \s-1POD,\s0 ou \s-1XML,\s0 pode ser inteligente traduzir o formato fonte e não este gerado. Na maioria dos casos, po4a::man vai detectar páginas geradas e mostrar um aviso. El vai até mesmo recusar processar páginas geradas no \s-1POD\s0 porque tais páginas são lidadas perfeitamente pelo po4a::pod, e porque sua contraparte nroff define um monte de novas macros que eu não desejo dar suporte. Na minha máquina, 1432 das 4323 página são geradas de \s-1POD\s0 e vão ser ignoradas pelo po4a::man. .PP Na maioria dos casos, po4a::man vai detectar o problema e se recusar a processar a página, apresentando uma mensagem adaptada. Em alguns casos raros, o programa vai completar sem avisos, mas a saída estará errada. Tais casos são chamados de \*(L"bugs\*(R" ;) Se você encontrar tal caso, certifique-se de relatá\-lo, junto com uma solução, quando possível… .SH "ESTADO DESTE MÓDULO" .IX Header "ESTADO DESTE MÓDULO" Este módulo pode ser usado para a maioria das páginas man existentes. .PP Alguns testes são executados frequentemente em máquinas Linux: .IP "\(bu" 4 um terço das páginas são recusadas porque foram geradas a partir de outro formato com suporte no po4a (ex: \s-1POD\s0 ou \s-1SGML\s0). .IP "\(bu" 4 10% das páginas remanescentes são rejeitadas com um erro (ex: uma macro groff não tem suporte). .IP "\(bu" 4 Então, menos de 1% das páginas são aceitas silenciosamente pelo po4a, mas com problemas significantes (isto é, palavras faltando ou novas palavras inseridas) .IP "\(bu" 4 As outras páginas são normalmente lidadas sem diferenças mais importantes do que diferenças de espaçamento ou linha redimensionada (problemas de fontes em menos de 10% das páginas processadas). .SH "VEJA TAMBÉM" .IX Header "VEJA TAMBÉM" \&\fBLocale::Po4a::Pod\fR\|(3pm), \fBLocale::Po4a::TransTractor\fR\|(3pm), \fBpo4a\fR\|(7) .SH "AUTORES" .IX Header "AUTORES" .Vb 3 \& Denis Barbier \& Nicolas François \& Martin Quinson (mquinson#debian.org) .Ve .SH "COPYRIGHT E LICENÇA" .IX Header "COPYRIGHT E LICENÇA" Copyright © 2002\-2008 \s-1SPI,\s0 Inc. .PP Esse programa é um software livre; você pode redistribuí\-lo e/ou modificá\-lo sob os termos da \s-1GPL\s0 (veja o arquivo \s-1COPYING\s0).