# Usando o &kbabel;

## Introdução

Normalmente, as mensagens e a documentação do programa são escritas em inglês. Usando uma plataforma composta por um conjunto de ferramentas e bibliotecas, é possível ter as suas aplicações favoritas falando a sua língua não-inglesa nativa. Este processo de adaptar uma aplicação a um idioma específico é conhecido por 'localização'. O processo de localização inclui a tradução das interfaces e da documentação do programa para os vários idiomas que o usuário precisa e, em alguns países e regiões, adaptar os métodos de entrada e saída de dados para convenções especiais. O &kbabel; é uma ferramenta que o ajudará no processo de internacionalização para fazer com que a interface de uma aplicação fale várias línguas.

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 retira uma cópia de um desses modelos POT e começa a preencher as mensagens em branco: cada mensagem é traduzida no idioma desejado. O arquivo que contém o texto traduzido é referido como sendo um arquivo PO (Portable Object - Objeto Portável).

Logo que todas as mensagens tenham sido traduzidas, o arquivo PO é compilado para um formato binário, conhecido como um arquivo MO (Machine Object - Objeto da Máquina). Estes arquivos, que serão salvos com uma extensão `.mo` (ou uma extensão `.gmo`), para mostrar que foram processados pelo 'gettext' da &GNU;), atuam como uma base de dados para minimizar o tempo ocupado pelas aplicações para procurar cada mensagem traduzida.

Isto leva a uma pergunta: eu preciso saber o que existe dentro de um arquivo PO, mesmo tendo o &kbabel;? A resposta é, sem dúvida, sim. Existem situações em que o catálogo de mensagens pode ficar corrompido e tenha de ser corrigido manualmente. A maioria destes problemas são os odiosos conflitos do CVS ou SVN que ocorrem quando um processo de tradução é coordenado por um sistema concorrente de controle de versões, como o CVS ou o Subversion (SVN). O &kbabel; não poderá ajudá-lo muito, se um destes problemas ocorrer, de modo que um editor de texto e algum conhecimento sobre os arquivos PO serão necessários. Vamos ver como se cria um arquivo PO.

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"`

As linhas em branco e as que começam por `#` são ignoradas. As linhas que começam por # representam comentários e são formas úteis de fornecer uma nota que detalhe o arquivo em que esta mensagem será usada e, no caso dos criadores das aplicações, para fornecer comentários adicionais para ajudar na tradução. O &kbabel; mostra 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.

Uma funcionalidade útil de internacionalização é chamada de formas plurais. O Inglês (e o Português) só usam o singular e uma única forma plural de nomes, ⪚ 1 arquivo e 10 arquivos. Isto leva a que muitos programadores pensem que o mundo é assim simples e que poderão usar mensagens do tipo Do you want to delete %1 file(s)?, onde o `%1` representa um conjunto de arquivos a remover. Isto é completamente errado. Na tradução para Eslovaco (por exemplo), você precisa de 3 formas diferentes da mensagem. Este número é diferente para os diferentes idiomas e mesmo quando o número é o mesmo, ⪚ o Checo usa também 3 formas, a regra que decide a forma a usar poderá ser muito diferente. As formas plurais nos arquivos PO estão aqui para ajudar.

Os programadores do &kde; escolheram uma implementação diferente para as formas plurais, em relação ao gettext da &GNU; e, por isso, introduziram o seu próprio formato e modo de tratamento das mensagens. Está planejado o uso das formas plurais do &GNU; gettext para o &kde; em sua versão 4.

## Editor

Aqui está uma imagem do &kbabel;.

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

Por questões de conveniência, o &kbabel; possui barras de ferramentas para acelerar várias operações e, para os usuários ocupados, existem muitos atalhos de teclado. A janela principal divide-se 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.

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ê quiser ver onde estão os espaços, você poderá ativar o Realçar fundo e/ou Marcar espaços com pontos na janela de configuração, na página 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 é permitido pelo pacote do 'gettext' da &GNU;. Isto irá mostrar o resultado do comando e marcar os msgstrs errados.

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

- As equações são um formato especial do msgid que é usado tipicamente nos arquivos `.desktop`. Uma vez que as suas traduções irão ser mescladas nestes arquivos, o msgstr precisa também usar este formato especial. Isto significa que a tradução deverá ter início (até à primeira ocorrência do `=` com o mesmo texto que a mensagem original, ⪚ `Name=`.

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

Como sempre, é muito importante verificar ortograficamente a sua tradução antes de usar o seu resultado. Desta forma, você sempre poderá encontrar erros tipográficos ou outros problemas na sua tradução. O &kbabel; usa a biblioteca-padrão do &kde; para fazer a verificação ortográfica e as suas opções normais poderão ser encontradas na janela de configuração do &kbabel;. A verificação ortográfica em si poderá ser acessada em Ferramentas Verificação Ortográfica . Você poderá usar um conjunto de modos na 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

Uma vez que as formas plurais são um assunto bastante complicado, é dedicada uma seção especial ao suporte delas no &kbabel;.

Esta seção lida com as formas plurais do &kde; (para ser mais preciso, para o &kde; versão 3). Desde o &kbabel; versão 1.11 (KDE 3.5) em diante, o &kbabel; também é capaz de ler, editar e salvar as formas plurais do 'gettext' da &GNU;.

Cada idioma em que o &kde; está traduzido precisa ter um número correto de formas plurais. Isto é feito ao traduzir um item no `kdelibs.po`. O número é definido ao selecionar o nome de um idioma, que usa o mesmo número e regras para procurar a forma plural correta. A lista atualizada dos valores possíveis poderá ser encontrada no código-fonte do 'kdelibs', no arquivo `kdecore/klocale.cpp`.

O 'gettext' da &GNU; permite definir o número e tipo de formas plurais, através de uma fórmula, e definir esta fórmula de forma independente para cada arquivo PO. O &kde; só pode definir o número e tipo de formas plurais uma vez no 'kdelibs'.

As formas plurais do &kde; são demarcadas com o comentário `_n:`, o qual contém o argumento `%n`. Este argumento é então usado na mensagem em si e controla qual a forma plural do seu idioma deverá ser usada, dependendo das regras do seu idioma.

A tradução de uma mensagem de uma forma plural terá de ter um formato especial. Deverá conter o número correto de traduções (uma por cada forma plural), separadas por um fim-de-linha `\n`, sem a seqüência `_n:` (e o espaço). Por exemplo, o _n: Selected1 file\nSelected %n files, traduzido para Português, ficaria:

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

marcus.gama@gmail.comPara 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).