Locale::Po4a::Po - módulo de manipulação dum
ficheiro PO
use Locale::Po4a::Po;
my $pofile=Locale::Po4a::Po->new();
# Ler ficheiro PO
$pofile->read('file.po');
# Adicionar uma entrada
$pofile->push('msgid' => 'Hello', 'msgstr' => 'olá',
'flags' => "wrap", 'reference'=>'file.c:46');
# Extrair uma tradução
$pofile->gettext("bom dia"); # returns 'bonjour'
# Escrever de volta para um ficheiro
$pofile->write('otherfile.po');
Locale::po4a:: Po é um módulo que permite que
manipule catálogos de mensagens. Pode carregar e escrever de/para um
ficheiro (cuja extensão é muitas vezes po), pode
construir novas entradas na execução ou pedir uma
tradução de uma cadeia.
Para uma descrição mais completa do catálogo
de mensagens no formato PO e o uso dele, por favor veja a
documentação info do programa gettext. (nó
"`Ficheiros PO"').
Este módulo é parte do projeto po4a, cujo objetivo
é usar ficheiros PO (projetado na origem para facilitar a
tradução de mensagens do programa) para traduzir tudo,
inclusive a documentação (página do manual, manual de
informação), descrição do pacote, modelos
debconf e tudo o que pode beneficiar a partir deste.
- --porefs
type
- Especifica o formato de referência. O argumento tipo pode
ser um de: never para não produzir qualquer
referência, file para especificar o ficheiro sem o
número da linha, counter para substituir os números
de linha a aumentar o contador e full para incluir
referências completas. (predefinição: full).
- --wrap-po
no|newlines|number (predefinição:
76)
- Especifica como o ficheiro po deve ter a quebra de linha. Isso permite
escolher entre ficheiros que tem boa quebra de linha, mas que podem levar
a conflitos de git ou ficheiros que são mais fáceis de
manipular automaticamente, mas mais difíceis de ler para humanos.
Historicamente, o pacote gettext reformatou os ficheiros po na
77ª coluna para questões cosméticas. Esta
opção especifica o comportamento de po4a. Se for definido
como um valor numérico, o po4a quebrará linha do ficheiro
po após esta coluna e após novas linhas no
conteúdo. Se for definido como newlines, o po4a
dividirá apenas o msgid e o msgstr após as novas linhas no
conteúdo. Se for definido como no, o po4a não
quebrará linha do ficheiro po. Os comentários de
referência têm sempre as linhas quebradas pelas
ferramentas do gettext que usamos internamente.
Observe que esta opção não afeta a
maneira como o msgid e o msgstr sofrem quebra de linhas ou seja, como os
caracteres de nova linha são adicionados ao conteúdo
dessas cadeias.
- --msgid-bugs-address
e-mail@endereço
- Definir o endereço do relatório para msgid bugs. Por
predefinição, os ficheiros POT criados não têm
campos Report-Msgid-bugs-To.
- --copyright-holder
string
- Definir o titular dos direitos de autor no cabeçalho POT. O valor
predefinido é " Free Software Foundation, Inc."
- --package-name
string
- Definir o nome do pacote para o cabeçalho POT. A
predefinição é "PACKAGE".
- --package-version
string
- Definir o nome do pacote para o cabeçalho POT. A
predefinição é "VERSION".
Funções relativas a catálogos de mensagens
inteiros
- novo()
- Cria um catálogo de mensagem novo. Se um argumento é
fornecido, é o nome dum ficheiro PO que deve carregar.
- ler($)
- Lê um ficheiro PO (que o nome é dado como argumento).
Entradas previamente existentes em si não são removidas, os
novos são adicionados ao fim do catálogo.
- escrever($)
- Escreve o catálogo atual ao ficheiro dado.
- write_if_needed($$)
- Como escrever, mas se o ficheiro PO ou POT já existe, o objeto
será escrito num ficheiro temporário, que será
comparado com o ficheiro existente para verificar se a
atualização é necessária (isso evita mudar um
POT apenas para atualizar uma linha de referência ou o campo
POT-Creation-Date).
- filtro($)
- Esta função extrai um catálogo a partir de um
já existente. Somente as entradas têm uma referência
no ficheiro dado será posto no catálogo resultante.
Esta função analisa o argumento dele, converte-o
para uma definição função Perl, avalia esta
definição e filtra os campos para os quais esta
função retornará verdadeiro.
Algumas vezes gosto de Perl ;)
- para_utf8()
- Recodifica para UTF-8 as mensagens traduzidas do PO. Não faz nada
se o conjunto de carateres não é especificado no ficheio PO
("charset" value), ou se já é UTF-8 ou ASCII.
Funções para utilizar um catálogo de
mensagens para traduções
- gettext($%)
- Pede a tradução duma dada sequência como argumento no
catálogo atual. Esta função retorna a
sequência (não traduzida) original, se a cadeia não
foi encontrada.
Após a cadeia para traduzir, pode passar um 'hash' de
argumentos adicionais. Aqui são as entradas válidas:
- wrap
- um booleano indica se podemos considerar que os espaços em branco
na cadeia não são importantes. Se sim, a
função canoniza a cadeia antes de procurar uma
tradução e envolve o resultado.
- wrapcol
- a coluna em que devemos envolver (predefinição: 76).
- stats_get()
- Retorna estatísticas sobre a taxa de acerto de gettext desde a
última vez que stats_clear() foi chamado. Por favor, note
que não são as mesmas estatísticas que são
impressas por msgfmt --statistic. Aqui, são as estatísticas
sobre o recente uso do ficheiro PO, enquanto msgfmt informa sobre o estado
do ficheiro. Exemplo de uso:
[algum uso do ficheiro PO para traduzir coisas]
($percent,$hit,$queries) = $pofile->stats_get();
print "Até agora, encontramos traduções para $percent\% ($hit de $queries) de cadeias.\n";
- stats_clear()
- Limpa as estatísticas sobre os êxitos do gettext.
Funções para a construção de um
catálogo de mensagens
- push(%)
- Empurrar uma nova entrada no final do catálogo atual. Os argumentos
devem formar uma tabela hash. As chaves válidas são:
- msgid
- a cadeia no idioma original.
- msgstr
- a tradução.
- reference
- uma indicação de onde essa cadeia foi encontrada. Exemplo:
file.c:46 (ou seja, em 'file.c' na linha 46). Pode ser uma lista separada
por espaços em caso de múltiplas ocorrências.
- um comentário adicionado aqui manualmente (pelo tradutor). O
formato é livre.
- automatic
- um comentário que foi adicionado automaticamente pelo programa de
extração da cadeia. Veja a opção
--add-comments do programa xgettext para obter mais
informações.
- flags
- lista separada por espaços de todas as 'flags' definidas para esta
entrada.
As 'flags' válidas são: c-text,
python-text, lisp-text, elisp-text,
librep-text, smalltalk-text, java-text,
awk-text, object-pascal-text, ycp-text,
tcl-text, wrap, no-wrap and fuzzy.
Consulte a documentação do gettext para o
significado deles.
- type
- este é mais um argumento interno: é usado enquanto os
documentos são 'gettextizados'. A ideia aqui é analisar
tanto o original como a tradução num objeto PO e fundi-los,
a usar um 'msgid' como 'msgid' e os outros 'msgid' como 'msgstr'. Para ter
certeza de que as coisas ficam bem, cada 'msgid em objetos PO recebem um
tipo, com base na estrutura deles (como "chapt",
"sect1", "p" e assim por diante em DocBook). Se os
tipos de cadeias não são as mesmas, significa que ambos os
ficheiros não partilham a mesma estrutura e, o processo e informa
um erro.
Esta informação é escrita como
comentário automático no ficheiro PO uma vez que dá
aos tradutores algum contexto sobre as cadeias para traduzir.
- wrap
- booleano que indica se os espaços em branco podem ser mutilados em
cosméticas reformatações. Se for verdade, a cadeia
está canonizada antes do uso.
Esta informação é gravada no ficheiro PO
a usar a 'flag' wrap ou B <no-wrap>.
- wrapcol
- a coluna em que devemos envolver (predefinição: 76).
Esta informação não é escrita no
ficheiro PO.
Funções auxiliares
- count_entries()
- Retorna a quantidade de entradas no catálogo (sem o
cabeçalho).
- count_entries_doc()
- Retorna a quantidade de entradas no documento. Se uma cadeia aparece
múltiplas vezes no documento, será contado múltiplas
vezes.
- msgid($)
- Retorna o identificador de mensagem do número dado.
- msgid_doc($)
- Retorna o identificador de mensagem na posição do documento
dada.
- type_doc($)
- Returns the type of the msgid with the given position in the document.
This is probably only useful to gettextization, and it's stored separately
from {$msgid}{'type'} because the later location may be overwritten by
another type when the $msgid is duplicated in the
master document.
- get_charset()
- Retorna o conjunto de caracteres especificado no cabeçalho PO. Se
não foi definido, irá retornar "UTF-8".
- set_charset($)
- Isso define o conjunto de caracteres do cabeçalho PO ao valor
especificado no primeiro argumento dele. Se nunca invocar esta
função (e nenhum ficheiro com um conjunto de caracteres
especificado é lido), o valor predefinido é
"UTF-8". Este valor não altera o comportamento deste
módulo, que é utilizado apenas para preencher esse campo no
cabeçalho e devolvê-lo em get_charset().
Denis Barbier <barbier@linuxfr.org>
Martin Quinson (mquinson#debian.org)