Marcus Gama

    marcus_gama@uol.com.br

Tradução

# Usando o &kbabel;

## Introdução

Normalmente as mensagens dos programas e a documentação são escritas em Inglês. Usando uma estrutura feita de um conjunto de ferramentas e bibliotecas, é possível ter seus aplicativos favoritos falando seu idioma nativo diferente do Inglês. Este processo de adaptação de um aplicativo para um idioma específico é conhecido como localização. O processo de localização inclui a tradução da interface e documentação do programa para diversos idiomas que os usuários necessitam e, em alguns países ou regiões, criando entradas e saídas de acordo com convenções particulares. O &kbabel; é uma ferramenta que lhe auxiliará no processo de internacionalização fazendo com que a interface de um aplicativo fale diversos idiomas.

Cada aplicativo apto à internacionalização torna disponível para a tradução um ou mais arquivos de catálogos de mensagens. A extensão destes arquivo é `.pot`. POT é um acrônimo para Portable Object Template (Modelo de Objeto Portável).

Cada tradutor obtém uma cópia do arquivo POT e inicia a tradução das mensagens. Este arquivo se torna um arquivo PO - Portable Object (Objeto Portável) e representa somente um idioma.

Cada tradutor faz uma cópia de um destes modelos POT e inicia o preenchimento nos espaços vagos: cada mensagem é traduzida para o idioma desejado. O arquivo contendo o texto traduzido é referenciado para um arquivo PO (Portable Object - Objeto Portável).

Uma vez que todas as mensagens estejam traduzidas, o arquivo PO é compilado para um formato binário legível pelo computador, conhecido como um arquivo MO (Machine Object - Objeto de Máquina). Estes arquivos, que serão armazenados com uma extensão `.mo`, agem como um banco de dados para minimizar o tempo levado pelos aplicativos para procurar por cada mensagem traduzida.

Isto sugere uma questão: eu preciso saber o que está dentro de um arquivo PO mesmo que eu tenha o &kbabel;? A resposta é, indubitavelmente, sim. Existem situações onde um catálogo de mensagem vem corrompido e necessita ser manualmente corrigido. A maioria destes problemas decorrem dos tão odiados conflitos de CVS que ocorrem quando um processo de tradução é coordenado por um sistema de versões concorrentes (veja a documentação do CVS). O &kbabel; não pode auxiliá-lo muito se um problema como este surge, então um editor de texto e algum conhecimento de arquivos PO é necessário. Vamos ver como um arquivo PO é feito.

Arquivos PO consistem de pares de mensagens—um msgid e um msgstr. A msgid é o texto em Inglês e a msgstr é o texto traduzido para o idioma apropriado. O texto que acompanha cada msgid e msgstr é colocado entre aspas duplas no estilo C. Um exemplo, obtido de um arquivo PO para o &noatun;, é `msgid "Open a Playlist"`

Linhas vazias e iniciadas com `#` são ignoradas. Linhas iniciando com um # representam comentários e são uma maneira útil de colocar uma nota detalhando em qual arquivo esta mensagem será usada e, no caso de escritores de aplicativos, para fornecer comentários adicionais que auxiliem na tradução. O &kbabel; exibe estas linhas de comentários para cada mensagem.

Em muitos casos o primeiro par de msgid-msgstr no arquivo PO é uma entrada falsa (agindo como um cabeçalho do arquivo PO) que contém várias informações sobre o arquivo PO traduzido, como o nome do aplicativo, data de tradução, nome do tradutor e assim por diante.

Versões recentes do &GNU; gettext adicionaram outro recurso i18n útil chamado formas plurais. O Inglês usa somente uma forma singular e uma plural de nomes, ⪚ 1 file e 10 files. Isto leva muitos desenvolvedores a uma idéia de que o mundo é simples assim e eles podem usar mensagens como Do you want to delete %1 file(s)?, onde o `%1` denota um número de arquivos a ser excluído. Mas isto está fundamentalmente errado. Para traduções para o eslovaco você precisa de 3 formas diferentes de mensagem. Este número é diferente para diferentes idiomas e mesmo quando for o mesmo, ⪚ o Tcheco usa 3 formas também, a regra para decidir que forma usar pode ser muito diferente.

Formas plurais em arquivos PO estão aqui para ajudar. Infelizmente, os desenvolvedores do &kde; não gostam da implementação de formas plurais do &GNU; gettext e eles tem introduzido seu próprio formato de manipulá-las.

## Editor

Aqui está uma captura de tela do &kbabel;. Por conveniência o &kbabel; possui barras de ferramentas para acelerar muitas operações e, para usuários ocupados, existem atalhos de teclado. A janela principal é dividida em quatro partes.

A caixa de edição superior-esquerda é somente de leitura e contém o campo msgid atual do arquivo PO aberto e seu texto em Inglês.

A caixa de edição inferior-esquerda contém o campo msgstr correspondente ao msgid mostrado e nela você pode editar o texto traduzido.

A parte superior-direita da janela é um painel de comentários onde você pode ver os comentários adicionados para a entrada atualmente sendo editada.

Ele pode ser usado:

- para descobrir como a mensagem atual é tratada pelo aplicativo (no estilo C ou simples)

- em alguns casos, para ler comentários úteis adicionados pelo desenvolvedor do aplicativo para auxiliar os tradutores em seu trabalho— por exemplo, podem ser dicas técnicas (usadas com grande efeito no projeto LyX)

- quando você precisa saber de qual arquivo uma mensagem vem porque você deseja informar um erro de ortografia no string original em Inglês.

Captura de tela do &kbabel;
Captura de tela do &kbabel;

A janela do editor (na parte inferior direita) é a parte mais sofisticada da janela principal do &kbabel;. Seu tamanho pode ser ajustado usando a linha divisória entre ele e o painel de comentário (na parte superior direita). A janela do editor possui dois painéis de aba—essencialmente é uma pequena 'fotografia' do arquivo PO. Durante a tradução, é muito comum que strings de mensagem estejam relacionados com as mensagens anterior e posterior, logo o painel de contexto é útil para dar uma olhada nas mensagens próximas para obter uma dica de como a mensagem atual pode ser melhor traduzida. A tradução de interface de diálogo é um bom exemplo, ou widgets com seu texto associado e mensagem "o que é isso".

### Mais Recursos do &kbabel;

Cada entrada msgid pode estar em três estados:

não traduzido

  não existe nenhum texto traduzido atualmente associado com o msgstr

aproximado

  `msgmerge` tentou corresponder um string traduzido procurando nas entradas do arquivo PO restantes. Isto não funcionou perfeitamente e você deve editar o texto traduzido para corresponder ao texto atual em Inglês.

traduzido

  a msgid é forma traduzida final da msgstr

O estado da entrada atual é indicada por dois LEDs. Dependendo de sua configuração eles podem estar tanto na barra de estado como acima da caixa de edição string traduzido. Ambos possuem uma cor personalizável (para refletir suas necessidades visuais ou gosto). Por favor leia a seção Preferências para ver como você pode ajustar estas configurações.

## Tradução Avançada

Agora você já tem uma idéia de como traduzir um arquivo PO. Nesta seção nós seguiremos com o modo padrão de traduzir novos arquivos PO usando os recursos avançados do &kbabel;. Nós assumiremos que você já abriu um arquivo-modelo POT e salvou-o como arquivo PO.

### Navegando no arquivo PO

O &kbabel; lhe permite navegar facilmente pelo arquivo de acordo com o estado de sua tradução. O estado não traduzido/aproximado já foi apresentado. Um mensagem pode ser marcada como erro como um resultado do verificar validação ou da validação feita pelo `msgfmt`. E, é claro, o &kbabel; suporta navegação do histórico com Avançar/Voltar, como no &konqueror;.

Todos os comandos de navegação estão no menu Ir.

Page Up | Move para a mensagem anterior
Page Down | Move para a próxima mensagem
&Ctrl;Page Up | Move para a mensagem aproximada anterior
&Ctrl;Page Down | Move para a próxima mensagem aproximada
&Alt;Page Up | Move para a mensagem não traduzida anterior
&Alt;Page Down | Move para a próxima mensagem não traduzida
&Shift;Page Up | Move para a mensagem com erro anterior
&Shift;Page Down | Move para a próxima mensagem com erro
&Ctrl;&Shift;Page Up | Move para a mensagem aproximada ou não traduzida anterior
&Ctrl;&Shift;Page Down | Move para a próxima mensagem aproximada ou não traduzida

### Edição inteligente

Edição inteligente significa que o editor lhe auxiliará na edição da tradução levando em conta características especiais do formato do PO. Ele escapará corretamente os caracteres quando necessário.

Ele também suporta mais de um modo para inserção de fim de linha. Isto é muito útil devido a maneira que o gettext manipula o fim de linha. Ele simplesmente o ignora. (Você pode imaginar que todo o texto no msgstr é uma linha simples.) Se você deseja inserir um fim de linha real, você precisa inserir `\n`. Mas a maioria dos tradutores não o fazem, de modo que uma nova linha no msgstr não adiciona nenhum espaço entre as linhas. Isto pode ser facilmente resolvido adicionando um espaço no final de cada linha. Mas você pode facilmente esquecer disso, então a edição inteligente faz isso automaticamente para você.

A tabela abaixo resume os recursos de edição inteligente.

Tab | Insere \t
" | Insere \"
Enter | Se o último caracter antes do cursor não é um espaço, insere um espaço. Então inicia uma nova linha.
&Ctrl;Enter | Inicia uma nova linha sem nenhuma adição lógica
&Shift;Enter | Insere \n e inicia uma nova linha

Se você deseja ver onde estão os espaços, você pode ligar Destacar fundo e/ou Marcar espaços em branco com pontos no diálogo de preferências na aba Editar Aparência.

### Tradução automática

Como um primeiro passo ao iniciar uma nova tradução, o &kbabel; oferece uma função para automaticamente traduzir as mensagens a partir de traduções antigas. Escolha Ferramentas Tradução Aproximada e o &kbabel; lhe apresentará o seguinte diálogo:

Diálogo de tradução aproximada

No diálogo, você deve especificar o que traduzir e escolher as fontes para as traduções antigas.

No topo do quadro O que traduzir estão três caixas de verificação (Entradas não traduzidas, Entradas aproximadas, Entradas traduzidas) para especificar que tipo de mensagens você deseja traduzir. Entradas não traduzidas e aproximadas são escolhas naturais para tradução automática, mas você pode mudar mensagens traduzidas também.

A correspondência exata para as msgids será sempre usada para tradução aproximada. No entanto, você pode adicionar mais estratégias, &ie; Permitir tradução aproximada (lento) e Permitir tradução de palavras simples. Ambas são estratégias adicionais que devem ser suportadas pelas fontes usadas (veja abaixo). Não há nenhuma especificação do que tradução aproximada significa, mas o propósito é bem óbvio. Tradução de palavras simples é aplicável somente para alguns idiomas. O &kbabel; tentará traduzir cada palavra no msgid separadamente e então colocar as palavras traduzidas (ou frases) na mesma ordem no msgstr.

Como uma fonte da tradução aproximada, qualquer módulo de dicionário disponível pode ser usado. Existe uma lista dos módulos Não usar e dos módulos Usar. Módulos são usados na ordem da lista Usar. O primeiro módulo é requisitado para tradução. Se nada for encontrado nele, o próximo módulo da lista é usado e assim por diante. Você pode usar os botões com setas para mover os módulos entre as listas. Não esqueça de mudar a ordem para atender as suas necessidades através dos botões Mover Acima e Mover Abaixo.

Normalmente o &kbabel; marcará cada mensagem aproximadamente traduzida como aproximada, porque ele assume que qualquer tradução automática necessita de ser revisada por um tradutor. Se você estiver 100% certo de que a tradução automática estará correta, ou se você revisará toda a tradução de qualquer modo, Marcar entradas mudadas como aproximada lhe permite desligar esta marcação automática de aproximado, mas você precisará confirmar isto.

Se você tiver configurado todas as opções de acordo com sua necessidade, pressione Iniciar para automaticamente traduzir as mensagens. Você pode acompanhar a barra de progresso e se for o caso, existe sempre o botão Parar.

### Validar sua tradução

Todos cometem erros. Logo o &kbabel; suporta um número de verificações para problemas típicos nas traduções. Estas verificações (não verificação de sintaxe) pode ser realizada basicamente de duas maneiras.

Verificações podem ser feitas para cada mudança no texto traduzido. Elas são chamadas verificações automáticas e elas podem ser ligadas no diálogo de configuração do &kbabel;.. A verificação automática da sintaxe é possível a cada salvamento do arquivo.

As verificações automáticas podem tornar o &kbabel; lento. Se você possui um computador lento, você pode desligar as verificações automáticas e usar somente a segunda possibilidade. Você pode invocar todo tipo de verificação a partir do Ferramentas Validação. Então a verificação é executada para todas as mensagens no arquivo e as falhas são marcadas como erros.

Verificar Sintaxe

  Isto invoca o `msgfmt` para verificar a validade do arquivo PO como visto pelo pacote gettext. Isto mostrará o resultado do comando e marcará as msgstrs erradas.

Verificar Argumentos

  Traduções incorretas podem travar o aplicativo. As partes mais perigosas da tradução são os argumentos, ⪚ para funções tipo printf. Esta verificação compara o número e tipo de argumentos no msgid e msgstr. Eles devem corresponder.

Verificar Aceleradores

  O texto da &GUI; comumente contém aceleradores, &ie; letras que podem ser usadas para um rápido acesso aos elementos da &GUI; através do teclado. Eles são marcados por um caracter especial, ⪚ & no &kde;. Um requisito típico da tradução é que o texto traduzido deve conter o acelerador do texto original. Esta verificação informa este problema para você. O caracter acelerador pode ser especificado nas Preferências na aba Miscelânea.

Procurar por Informações de Contexto Traduzidas

  Você provavelmente precisará disto para traduções do &kde;. Alguns textos que são muito comuns precisam ser traduzidos diferentemente em diferentes contextos. No &kde; este contexto é descrito no início da msgid após a seqüência especial `:_`. Mas se alguns tradutores podem não estar cientes desta convenção e tentar traduzir a informação de contexto também. Esta verificação tenta encontrar este erro. Se ele encontrar informações de contexto traduzidas, você deve removê-las.

Verificar Formas Plurais

  Se a msgid é especificada como uma forma plural, a tradução deve conter o número correto de traduções separadas por `\n`. O número correto depende do idioma da tradução e é especificado na aba Identidade no diálogo Preferências. Esta implementação, até agora, ocorre somente para o &kde;.

Verificar Equações

  Equações são um formato especial do msgid tipicamente usado em arquivos .desktop. E porque suas traduções serão mescladas para estes arquivos, o msgstr deve usar este formato especial também. Isto significa que a tradução deve iniciar (após a primeira ocorrência do `=`) com o mesmo texto da mensagem original, ⪚ `Name=`.

### Verificação ortográfica da tradução

Como sempre, é muito importante verificar a ortografia de sua tradução antes de usar seu resultado. Desta maneira você pode encontrar erros e outros problemas em sua tradução. O &kbabel; usa a biblioteca padrão do &kde; para verificação ortográfica e esta configuração padrão pode ser encontrada no diálogo de configuração do &kbabel;. A verificação ortográfica em si mesma pode ser encontrada no submenu Ferramentas Ortografia. Você pode usar os seguintes modos para verificação ortográfica:

Verificar ortografia...

  Esta é uma invocação genérica de um diálogo, de onde você pode escolher o modo de verificação ortográfica e configurar um modo padrão. Este será invocado pressionando &Ctrl;I.

Verificar Tudo...

  Verifica todas as mensagens no arquivo.

Verificar da Posição do Cursor...

  Inicia a verificação ortográfica na posição da mensagem atual e continua em direção ao fim do arquivo.

Verificar Atual...

  Verifica a ortografia somente da mensagem atual.

Verificar Texto Selecionado...

  Se existir um texto selecionado no editor de msgstr, esta opção estará disponível e a verificação ortográfica será apenas deste texto.

### Traduzir &XML;, HTML, ...

Linguagens de marcação são usadas cada vez mais em &GUI;. O projeto &kde; também usa arquivos PO para tradução de arquivos de documentação DocBook (que é também uma linguagem de marcação). O &kbabel; contém muitas funcionalidades para suportar esta tendência.

Aqui, nós descreveremos somente funções relacionadas às tags usadas por marcações propriamente ditas. O outro problema introduzido pelo uso de linguagens de marcação é a tradução de textos longos. Isto é endereçado pelo recurso diff descrito na seção seguinte.

A versão atual do &kbabel; é capaz de encontrar quais tags são usadas no msgid e fornecer um acesso fácil a elas usando as seguintes ações no Editar.

Inserir Próxima Tag

  Isto insere a próxima tag encontrada no msgid para a tradução. O &kbabel; encontra a tag a ser inserida contando o números de tags a partir do início da tradução.

Editar Inserir Tag

  Este submenu contém todos as diferentes tags de marcação encontradas no string original em inglês. Selecionando uma delas você pode inseri-la na posição do cursor no texto traduzido.

### Mostrar a diferença

Como já explanado, aplicativos atuais, tentando ser amigáveis com o usuário, contém uma grande quantidade de texto descritivo, incluindo marcações. Se o desenvolvedor muda uma parte do texto, o sistema &GNU; gettext irá, na melhor hipótese, manter a tradução antiga e marcá-la como aproximada. (Na pior hipótese você perderá a tradução completamente, dependendo do tamanho do texto mudado). Isto funciona bem se um msgid é curto, porque você poderá encontrar as mudanças rapidamente. Mas se o texto é longo o bastante, você terá que se esforçar para descobrir o que mudou (Por exemplo, pode ser somente um artigo mudado pela equipe de leitura.)

Para auxiliar, o &kbabel; pode ser solicitado a procurar a msgid original e mostrar a diferença. As mudanças serão exibidas graficamente no editor do String Original. O modo exato pode ser configurado no diálogo de configuração do &kbabel;. O Ferramentas Diferença Mostrar Diferença mostrará as diferenças encontradas. Para ver o texto atual sem a mistura com o texto original, use Ferramentas Diferença Mostrar Texto Original.

Você pode ligar ou desligar a procura automática por diferenças escolhendo Ferramentas Diferença Modo de Diferenças. Quando o modo de diferença estiver ligado, a busca por diferenças inicia quando você vai para outra mensagem.

Como sempre, você pode usar fontes de diferenças para encontrar a versão antiga do texto, tudo sendo configurado no diálogo de configuração do &kbabel;:

Banco de Dados de Traduções

  Você pode usar o Banco de Dados de Traduções para procura por diferenças. Nós recomendamos fortemente habilitar o armazenamento automático das mensagens traduzidas para o Banco de Dados de Traduções no diálogo de configuração do Banco de Dados de Traduções. Este modo pode ser ligado pelo Usar mensagens do Banco de Dados de Traduções.

Árvore de arquivos antigos

  Isto será usado somente se a procura no Banco de Dados de Traduções estiver desligada. Configurando o Pasta base para diferença de arquivos você pode informar ao &kbabel; qual arquivo usar para diferenças. Ele obtém o caminho relativo do arquivo aberto e usa este caminho na pasta especificada aqui. Se existir um arquivo correspondente, ele será usado. Para usar este modo, você deve fazer uma cópia dos arquivos antigos antes de cada atualização.

Escolher manualmente o arquivo

  Se a possibilidade anterior não funcionar corretamente, você pode sempre configurar um arquivo para diferenças manualmente selecionando Ferramentas Diferença Abrir Arquivo para Diferença.

A procura por diferença nem sempre é precisa, porque o arquivo PO não contém nenhum referência à mensagem original.

## Formas Plurais

Em virtude das formas plurais serem um assunto complicado, nós dedicamos uma seção especial para seu suporte no &kbabel;.

O &kbabel; pode ler as formas plurais &GNU; somente, mas não pode editá-las. Ele somente suporta a versão &kde; de formas plurais no momento.

Cada idioma para o qual o &kde; é traduzido deve configurar um correto número de formas plurais. Isto é feito traduzindo uma entrada no `kdelibs.po`. O número pé configurado selecionando o nome de um idioma, que usa o mesmo número e regras para encontrar a forma plural correta. A lista atualizada dos valores possíveis pode ser encontrada no código fonte do kdelibs, no arquivo `kdecore/klocale.cpp`.

As formas plurais do &kde; são denotadas pelo comentário `_:` contendo o argumento `%n`. Este argumento é então usado na mensagem propriamente dita e ele controla que forma plural de seu idioma deve ser usada dependendo das regras para seu idioma.

A tradução de uma mensagem de forma plural deve ter um formato especial. Ela deve conter o número correto de traduções (uma para cada forma plural) separadas por um fim de linha `\n`. Por exemplo, Selected %n files traduzido para o Eslovaco deve ser:

    Vybraný %n súbor\n
    Vybrané %n súbory\n
    Vybraných %n súborov

Para verificar se sua tradução contém o número correto de formas plurais, use o menu Ferramentas Validação Verificar Formas Plurais (somente KDE).