use Locale::Po4a::Po;
my $pofile=Locale::Po4a::Po->new();
# Lê um arquivo PO
$pofile->read('arquivo.po');
# Adiciona uma entrada
$pofile->push('msgid' => 'Hello', 'msgstr' => 'bom dia',
'flags' => "wrap", 'reference'=>'file.c:46');
# Extrai uma tradução
$pofile->gettext("Hello"); # retorna "bom dia"
# Escreve de volta em um arquivo
$pofile->write('outroarquivo.po');
Locale::Po4a::Po é um módulo que permite que
você manipule catálogo de mensagens. Você pode carregar
e escrever de/para um arquivo (cujas extensões geralmente são
po), você pode compilar novas entradas em tempo real ou
requisitar a tradução de uma string.
Para uma descrição mais completa do catálogo
de mensagens no formato PO e seu uso, por favor veja a
documentação info do programa gettext. (nó
"`Arquivos PO"').
Este módulo é parte do projeto po4a, cujo objetivo
é usar arquivos PO (projetado em sua origem para facilitar a
tradução de mensagens de programas) para traduzir tudo,
incluindo documentação (páginas de manual, manual
info), descrição de pacotes, modelos de debconf e tudo que
pode se beneficiar dele.
- --porefs
tipo[,wrap|nowrap]
- 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 arquivo sem o
número de linha, counter para substituir os números
de linha aumentando o contador e full para incluir
referências completas. (padrão: full).
Argumento pode estar seguido por uma vírgula e as
palavras-chaves wrap ou nowrap. Referências
são escritas por padrão em uma única linha. A
opção wrap quebra as referências em
várias linhas, para copiar as ferramentas do gettext
(xgettext e msgmerge). Essa opção vai se
tornar o padrão em um lançamento futuro, mas ela é
mais sensível. A opção nowrap está
disponível de forma que usuários que desejarem manter o
comportamento antigo podem fazê-lo.
- --msgid-bugs-address
e-mail@endereço
- Define o endereço para relatórios de erros em msgids. Por
padrão, os arquivos POT criados possuem nenhum campo
Report-Msgid-Bugs-To.
- --copyright-holder
string
- Define o detentor do copyright no cabeçalho do POT. O valor
padrão é "Free Software Foundation, Inc."
- --package-name
string
- Define o nome do pacote para o cabeçalho do POT. O padrão
é "PACKAGE".
- --package-version
string
- Define a versão do pacote do cabeçalho do POT. O
padrão é "VERSION".
Funções relativas a catálogos de mensagens
inteiros
- new()
- Cria uma nova mensagem de catálogo. Se for fornecido um argumento,
é o nome de um arquivo PO que nós devemos carregar.
- read($)
- Lê um arquivo PO (cujo nome é fornecido como argumento).
Entradas previamente existentes nele não são removidas,
sendo as novas adicionadas ao final do catálogo.
- write($)
- Escreve o catálogo atual no arquivo fornecido.
- write_if_needed($$)
- Similar ao "write", mas se o arquivo PO ou POT já
existir, o objeto será escrito em um arquivo temporário, o
qual será comparado com o arquivo existente para verificar se a
atualização é necessária (isso evita alterar
um POT apenas para atualizar uma linha de referência ou o campo
POT-Creation-Date).
- gettextize($$)
- Esta função produz um catálogo de mensagens traduzido
de dois catálogos, um original e uma traduzido. Este processo
é descrito no po4a(7), seção
Gettextização: como ela funciona?.
- filter($)
- Esta função extrai um catálogo de um outro existente.
Apenas as entradas contendo uma referência no arquivo fornecido
serão inseridas no catálogo resultante.
Esta função analisa seu argumento, convertendo-o
para uma definição de função de Perl, avalia
esta definição e filtra os campos para os quais esta
função retorna verdadeiro.
Tem vezes que eu adoro Perl ;)
- to_utf8()
- Re-codifica para UTF-8 as "msgstr"s do PO. Faz nada se a
codificação de caracteres não tiver sido especificada
no arquivo PO (valor "CHARSET") ou se ele já for UTF-8 ou
ASCII.
Funções para usar um catálogo de mensagens
para traduções
- gettext($%)
- Requisita a tradução de uma string fornecida como argumento
no catálogo atual. A função retorna a string original
(não traduzida) se a string não tiver sido encontrada.
Após a string para ser traduzida, você pode
passar um hash de argumentos extras. Aqui estão as entradas
válidas:
- wrap
- booleano indicando se nós podemos considerar que espaços em
branco na string não são importantes. Se sim, a
função canoniza a string antes de procurar por uma
tradução e dimensiona o resultado.
- wrapcol
- a coluna na qual nós deveríamos dimensionar (padrão:
76).
- stats_get()
- Retorna estatísticas sobre a proporção de acerto do
gettext desde a última vez que stats_clear() foi chamada.
Por favor, note que essa não é a mesma estatística
impressa por msgfmt --statistic. Aqui, essa estatística sobre uso
recente do arquivo PO, enquanto msgfmt relata o estado do arquivo. Exemplo
de uso:
[um uso do arquivo PO para traduzir coisas]
($percent,$hit,$queries) = $pofile->stats_get();
print "Até agora, nós encontramos traduções para $percent\% ($hit de $queries) da strings.\n";
- stats_clear()
- Limpa as estatísticas sobre os acertos do gettext.
Funções para compilar um catálogo de
mensagem
- push(%)
- Insere uma nova entrada no final do catálogo atual. Os argumentos
deveriam formar uma tabela de hash. As chaves válidas
são:
- msgid
- a string no idioma original.
- msgstr
- a tradução.
- reference
- uma indicação de onde esta string foi encontrada. Exemplo:
file.c:46 (significa em "file.c" na linha 46). Ela pode ser uma
lista separada por espaço no caso de múltiplas
ocorrências.
- um comentário adicionado aqui manualmente (pelos tradutores). Este
formato é livre.
- automatic
- um comentário que foi adicionado automaticamente pelo programa de
extração de strings. Veja a opção
--add-comments no programa xgettext para mais
informações.
- flags
- lista separada por espaço de todas as opções
definidas para esta entrada.
Opções 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 e fuzzy.
Veja a documentação do gettext para ver seu
significado.
- type
- esse é basicamente um argumento interno: ele é usado ao
gettextizar documentos. A ideia aqui é analisar tanto o original
quanto a tradução em um objeto PO e mesclá-los,
usando a msgid do primeiro e o msgid do segundo como msgstr. Para
certificar-se de que as coisas funcionem, a cada msgid nos objetos PO
é fornecido um tipo, baseado em sua estrutura (como
"chapt", "sect1", "p" e outros, em DocBook).
Se os tipos de strings não forem os mesmos, significa que ambos
arquivos não compartilham a mesma estrutura e o processa relata um
erro.
Esta informação é escrita como um
comentário automático no arquivo PO já que isso
fornece aos tradutores algum contexto sobre as strings para
traduzir.
- wrap
- booleano indicando se espaços em branco podem ser separados em
reformatação cosmética. Se verdadeiro, a string
é canonizada antes de ser usada.
Esta informação é escrita no arquivo PO
usando as opções wrap ou no-wrap.
- wrapcol
- a coluna na qual nós deveríamos dimensionar (padrão:
76).
Esta informação não é escrita no
arquivo PO.
Funções diversas
- count_entries()
- retorna o número de entradas no catálogo (sem o
cabeçalho).
- count_entries_doc()
- Retorna o número de entradas no documento. Se uma string aparece
múltiplas vezes no documento, ele vai ser contado múltiplas
vezes.
- equals_msgid(po)
- Retorna ($uptodate, $diagnostic) com
$uptodate indicando se todas as msgid do arquivo
po atual também estão presentes naquele que foi passado como
parâmetro (todos os outros campos são ignorados na
comparação de arquivos). Informalmente se
$uptodate retornar falso, então os arquivos
po podem ser alterados quando forem através do
po4a-updatepo.
Se $uptodate for falso, então
$diagnostic contém um diagnóstico
de por que isto é assim.
- msgid($)
- retorna o msgid do número fornecido.
- msgid_doc($)
- retorna o msgid com a posição fornecida no documento.
- get_charset()
- retorna a codificação de caracteres do cabeçalho do
PO. Se ele não tiver sido definido, ele vai retornar
"CHARSET".
- set_charset($)
- Isso define a codificação de caracteres do cabeçalho
PO para o valor especificado no seu primeiro argumento. Se você
nunca chamou esta função (e nenhum arquivo com uma
codificação de caracteres especificada for lida), o valor
padrão é deixado com "CHARSET". Este valor
não altera o comportamento deste módulo, ele apenas é
usado para preencher aquele campo no cabeçalho e retorná-lo
em get_charset().
Denis Barbier <barbier@linuxfr.org>
Martin Quinson (mquinson#debian.org)