Pedro Morais

    morais@kde.org

Tradução

# Usar 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 a falar a sua língua não-inglesa nativa. Este processo de adaptar uma aplicação a uma língua específica é conhecido por 'localização'. O processo de localização inclui a tradução das interfaces e da documentação do programa para as várias línguas que o utilizador necessita 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.

Todos os programas com capacidades de internacionalização tornam disponíveis para tradução um ou mais ficheiros de catálogo de mensagens. A extensão destes ficheiros é a `.pot`. O POT é uma abreviatura de Portable Object Template (Modelo de Objecto Portável).

Cada tradutor retira uma cópia de um ficheiro POT e começa a traduzir as mensagens. Este ficheiro transformar-se-á num ficheiro PO - Portable Object (Objecto Portável) - e representará apenas uma língua.

Cada tradutor retira uma cópia de um desses modelos POT e começa a preencher as mensagens em branco: cada mensagem é traduzida na língua desejada. O ficheiro que contém o texto traduzido é referido como sendo um ficheiro PO (Portable Object - Objecto Portável).

Logo que todas as mensagens tenham sido traduzidas, o ficheiro PO é compilado para um formato binário, conhecido como um ficheiro MO (Machine Object - Objecto da Máquina). Estes ficheiros, que serão gravados com uma extensão `.mo`, actuam como uma base de dados para minimizar o tempo ocupado pelas aplicações para procurar cada mensagem traduzida.

Isto leva a uma pergunta: é necessário saber o que existe dentro de um ficheiro 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 que ocorrem quando um processo de tradução é coordenado por um sistema concorrente de controlo de versões (veja a documentação do CVS). O &kbabel; não o poderá ajudar muito, se um destes problemas se levantar, de modo que um editor de texto e algum conhecimento acerca dos ficheiros PO serão necessários. Vamos ver como é que se cria um ficheiro PO.

Os ficheiros PO consistem em vários pares de mensagens — um msgid e um msgstr. O 'msgid' é o texto em inglês e o 'msgstr' é o texto traduzido na língua apropriada. O texto que acompanha cada um dos 'msgid' e 'msgstr' está retido entre aspas semelhantes às da linguagem C. Segue-se um exemplo, retirado de um ficheiro PO do &noatun;, é o `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 ficheiro 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 dos casos, o primeiro par 'msgid'-'msgstr' dos ficheiros PO é um item falso (que actua como cabeçalho do ficheiro PO) que contém várias informações acerca do ficheiro PO traduzido, como o nome da aplicação, a data da tradução, o nome do tradutor e assim por diante.

As versões recentes do 'gettext' da &GNU; adicionaram outra funcionalidade útil de i18n chamada formas plurais. O Inglês (e o Português) só usam o singular e uma única forma plural de nomes, ⪚ 1 ficheiro e 10 ficheiros. 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 ficheiros 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 as diferentes línguas e mesmo quando é o mesmo, ⪚ o Checo usa também 3 formas, só que a regra que decide a forma a usar é que poderá ser muito diferente.

As formas plurais nos ficheiros PO estão aqui para ajudar. Infelizmente, os programadores do &kde; não gostam da forma como estão implementadas as formas plurais no gettext da &GNU; e, por isso, introduziram o seu próprio formato e o tratamento das mesmas mensagens.

## Editor

Aqui está uma imagem do &kbabel;. Por questões de conveniência, o &kbabel; tem barras de ferramentas para acelerar várias operações e, para os utilizadores ocupados, existem muitos atalhos de teclado. A janela principal divide-se em quatro partes.

O campo de edição em cima e à esquerda é só para leitura e contém o campo 'msgid' actual do ficheiro PO aberto e o seu texto em inglês.

O campo de edição em baixo e à esquerda contém o campo 'msgstr' relacionado com o 'msgid' apresentado e aqui você poderá editar o texto traduzido.

A parte em cima e à direita é um painel de comentários onde você poderá ver os comentários que foram adicionados para o item em edição no momento.

Pode ser usado:

- para descobrir como é que a mensagem actual é tratada pela aplicação (formatada à C ou simples)

- em alguns casos, para ler os comentários úteis adicionados pelos programadores da aplicação para ajudar os tradutores no seu trabalho — por exemplo, poderão existir sugestões técnicas (usadas com grande aplicação no projecto LyX)

- quando precisa de saber em que ficheiro existe uma dada mensagem, porque precisa de comunicar um erro ortográfico no texto original em inglês.

Imagem do &kbabel;
Imagem do &kbabel;

A janela do editor (em baixo e à direita) é a parte mais sofisticada da janela principal do &kbabel;. O seu tamanho poderá ser ajustado usando a linha divisória entre ele e o painel do comentário (o painel em cima e à direita). A janela do editor tem dois painéis separados em páginas — uma que contém a informação da procura e a outra com a informação de contexto. A página da informação de contexto contém uma área posicionável que mostra os 4 itens anteriores e seguintes associados ao item actual — essencialmente, é uma pequena 'fotografia' do ficheiro PO. Durante a tradução, é bastante comum os textos das mensagens estarem relacionados com as mensagens anteriores e subsequentes, de modo a que o painel de contexto seja útil para procurar nas mensagens adjacentes para ter uma ideia de como a mensagem actual poderá ser melhor traduzida. A tradução das interfaces das janelas é um bom exemplo, ou os itens gráficos e a sua mensagem de "o que é isto?".

### Mais Funcionalidades do &kbabel;

Cada item do 'msgid' poderá estar num de três estados:

não-traduzido

  não existe nenhum texto traduzido associado de momento ao 'msgstr'

'fuzzy' (aproximado)

  o `msgmerge` tentou fazer a correspondência de um determinado texto, procurando nos restantes itens do ficheiro PO. Isto não funciona perfeitamente e você precisa de editar o ficheiro traduzido para se adequar ao texto actual em inglês.

traduzido

  o 'msgid' é a forma completamente traduzida do 'msgstr'

O estado do item actual é indicado através de dois LEDs. Dependendo da sua configuração, estes tanto poderão estar na barra de estado como no campo de edição do texto traduzido. Ambos têm uma cor personalizável (para reflectir os seus gostos ou requisitos visuais). Por favor leia a secção das Preferências para ver como poderá ajustar essas opções.

## Tradução Avançada

Agora você tem uma ideia sobre como traduzir um ficheiro PO. Nesta secção, tentar-se-á seguir a forma normal de traduzir um novo ficheiro PO usando as funcionalidades avançadas do &kbabel;. Assumir-se-á que você já abrium ficheiro POT de modelo e o gravou como um ficheiro PO.

### Navegação no ficheiro PO

O &kbabel; permite-lhe navegar facilmente pelo ficheiro, de acordo com o estado da sua tradução. O estado de não-traduzido/aproximado já foi introduzido. Uma mensagem poderá ser marcada como errada em resultado de uma verificação ou pela validação feita pelo `msgfmt`. E, claro, o &kbabel; suporta a navegação no histórico das mensagens visitadas com o Avançar/Recuar, como no &konqueror;.

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

Page Up | Mover para a mensagem anterior
Page Down | Ir para a próxima mensagem
&Ctrl;Page Up | Vai para a mensagem aproximada anterior
&Ctrl;Page Down | Vai para a próxima mensagem aproximada
&Alt;Page Up | Vai para a mensagem não-traduzida anterior
&Alt;Page Down | Vai para a próxima mensagem não-traduzida
&Shift;Page Up | Vai para a mensagem de erro anterior
&Shift;Page Down | Vai para a mensagem de erro seguinte
&Ctrl;&Shift;Page Up | Vai para a mensagem aproximada ou não-traduzida anterior
&Ctrl;&Shift;Page Down | Vai para a mensagem aproximada ou não-traduzida seguinte

### Edição inteligente

A edição inteligente significa que o editor o irá ajudar a editar facilmente a tradução, enquanto tem em conta as potencialidades do formato PO. Irá escapar correctamente, à medida das necessidades.

Também suporta mais do que um modo para introduzir o fim-de-linha. Isto é bastante útil por causa da forma como o 'gettext' lida com os fim das linhas. Ele simplesmente ignora-as. (você poderá imaginar que todo o texto do msgstr é uma única linha). Se você quiser introduzir um fim-de-linha real, você terá de introduzir um `\n`. Mas a maioria dos tradutores não se lembra que uma nova linha no msgstr não adiciona nenhum espaço entre as linhas. Isto poderá ser resolvido facilmente se adicionar um espaço no fim de cada linha. Mas você poder-se-á esquecer facilmente disso, por isso a edição inteligente fará isso automaticamente por si.

A tabela em baixo resume as funcionalidades de edição inteligente.

Tab | Introduz um \t
" | Introduz um \"
Enter | Se o último carácter antes do cursor não for um espaço, introduz um espaço. De seguida, inicia uma nova linha.
&Ctrl;Enter | Inicia uma nova linha sem qualquer lógica adicional
&Shift;Enter | Introduz um \n e começa uma nova linha

Se você quiser ver onde é que estão os espaços, você poderá activar o Realçar o fundo e/ou Marcar os espaços com pontos na janela de configuração, na página Editar Aparência.

### Tradução automática

Como primeiro passo no início de uma nova tradução, o &kbabel; oferece uma função para preencher automaticamente as traduções das mensagens das traduções anteriores. Escolha a opção Ferramentas Tradução Lata para que o &kbabel; lhe apresente a seguinte janela:

Janela de tradução lata

Na janela, você deverá indicar o que deverá ser traduzido e escolher as referências das traduções anteriores.

No cimo da área O que traduzir existem três opções (Itens não-traduzidos, Itens aproximados, Itens traduzidos) para indicar o tipo de mensagens que deseja traduzir. Os itens não-traduzidos e os aproximados são escolhas naturais para a tradução automática, mas você poderá também alterar as mensagens já traduzidas.

A correspondência exacta para os msgids será sempre usada na tradução lata. Contudo, você poderá adicionar mais estratégias, &ie; Permitir as traduções aproximadas (lento) e Permitir traduções de palavras únicas. Ambas as estratégias adicionais precisam de ser suportadas pelo código usado (ver em baixo). Não existe nenhuma especificação sobre o que é que a tradução aproximada significa, mas o intuito é bastante óbvio. A Tradução de palavras únicas adequa-se apenas em algumas das línguas. O &kbabel; irá tentar traduzir cada palavra do msgid em separado e tentará então colocar as palavras (ou frases) traduzidas, pela mesma ordem, no msgstr .

Como referência para a tradução lata, qualquer módulo de dicionário disponível poderá ser usado. Existe uma lista de módulos Não usar e Usar. Os módulos são usado peloa ordem da lista Usar. É pedido ao primeiro módulo uma tradução. Se não for encontrada, o próximo módulo da lista é notificado, e assim por diante. Você poderá usar os botões com as setas para mover os módulos entre as listas. Não se esqueça de alterar a ordem de acordo com as suas necessidades com os botões Subir e Descer.

Normalmente o &kbabel; irá marcar todas as mensagens traduzidas de forma lata como sendo 'fuzzy' (aproximadas), porque assume que todas as traduções automáticas deverão ser revistas pelo tradutor. Parte de você, ter 100% de certeza que a tradução automática será correcta, ou rever todas as traduções à mesma. A opção Marcar os itens alterados como aproximados permite-lhe desactivar esta marcação automática, mas você irá precisar de confirmar isso.

Se você tiver configurado todas as opções de acordo com as suas necessidades, carregue em Iniciar para traduzir automaticamente as mensagens. Você poderá seguir a barra de progresso e, se for caso, existe sempre o botão para Parar.

### Validar a sua tradução

Toda a gente comete erros. Como tal, o &kbabel; suporta um conjunto de verificações para os problemas típicos das traduções. Estas validações (não incluem verificações sintácticas) poderão ser efectuadas, basicamente, de duas formas.

As verificações poderão ser feitas a cada alteração do texto traduzido. Estas são denominadas por verificações automáticas e poderão ser activadas na janela de configuração do &kbabel;. A verificação automática da sintaxe é permitida a cada gravação do ficheiro.

As verificações automáticas poderão tornar o &kbabel; mais lento. Se você tiver um computador lento, você poderá desligar as verificações automáticas e usar apenas a segunda hipótese. Você poderá invocar qualquer tipo de verificação em Ferramentas Validação. Aí, a verificação é feita para todas as mensagens do ficheiro e as mensagens inválidas serão marcadas como erros.

Verificar a Sintaxe

  Isto invoca o `msgfmt` para verificar a validade do ficheiro PO, como é permitido pelo pacote do 'gettext'. Isto irá mostrar o resultado do comando e marcar os msgstrs errados.

Verificar os Argumentos

  As traduções incorrectas poderão fazer estoirar a aplicação. As partes mais perigosas das traduções são os argumentos, ⪚ para as funções do tipo 'printf'. Esta verificação compara o número e os tipos dos argumentos no msgid e no msgstr. Estes terão de ser iguais.

Verificar Aceleradores

  O texto da interface gráfica normalmente contém aceleradores, &ie; as letras que poderão ser usadas para aceder rapidamente aos elementos da interface com o teclado. Estes são assinalados com um carácter especial, ⪚ o & no &kde;. O requisito típico da tradução é que o texto traduzido também terá de conter o acelerados. Esta verificação irá confirmar isso para si. O carácter do acelerador poderá ser indicado em Preferências, na página Diversos.

Procurar por Informação de Contexto Traduzida

  Você só irá provavelmente necessitar disto para a tradução do &kde;. Alguns dos textos são bastante comuns e eles precisam de ser traduzidos de forma diferente quando os contextos são diferentes. No &kde;, o contexto é descrito no início do msgid a seguir à sequência especial `:_`. Porém, se alguns tradutores não estiverem a par desta convenção e tentarão traduzir a informação de contexto também. Esta validação irá tentar encontrar essas mensagens. Se a verificação encontrar alguma informação de contexto traduzida, você deverá tentar removê-la.

Verificar Formas Plurais

  Se o msgid for especificado como uma forma plural, a tradução terá de conter o número correcto de traduções, separadas por `\n`. O número correcto depende da língua da tradução e é indicado na página Identidade da janela de Preferências. Isto só está implementado para o &kde; de momento.

Verificar as Equações

  As equações são um formato especial do msgid que é usado tipicamente nos ficheiros '.desktop'. Atendendo a que as suas traduções irão ser reunidas nestes ficheiros, o msgstr precisa também de 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=`.

### Verificar ortograficamente a 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 acedida em Ferramentas Verificação Ortográfica . Você poderá usar um conjunto de modos na verificação ortográfica:

Verificação ortográfica...

  Esta é uma invocação genérica de uma janela, onde você poderá escolher o modo da verificação ortográfica e definir o modo por omissão, o qual será invocado com a combinação de teclas &Ctrl;I .

Verificar Tudo...

  Verifica todas as mensagens deste ficheiro.

Verificar A Partir da Posição do Cursor...

  Inicia a verificação ortográfica na posição da mensagem actual e vai avançando até ao fim do ficheiro.

Verificar a Actual...

  Verifica ortograficamente apenas a mensagem actual.

Verificar o Texto Seleccionado...

  Se existir algum texto seleccionado no editor da msgstr, esta opção ficará disponível e irá verificar ortograficamente apenas este texto.

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

As linguagens de formatação são usadas cada vez mais no GUI. O projecto do &kde; também usa os ficheiros PO para traduzir os ficheiros de documentação de DocBook (que é também uma linguagem de formatação). O &kbabel; contém algumas funcionalidades para suportar esta tecnologia.

Aqui, iremos descrever apenas as funções relacionadas com as marcas ('tags') usadas na formatação em si. O outro problema introduzido pelas linguagens de formatação é a tradução dos textos mais compridos. Este item é tratado pela funcionalidade de diff (diferenças), que é descrito na secção seguinte.

A versão actual do &kbabel; é capaz de encontrar quais as marcas que são usadas no msgid e possibilita facilmente o acesso às mesmas, recorrendo às acções seguintes em Editar:

Inserir a Próxima Marca

  Isto introduz a próxima marca encontrada no 'msgid' na tradução. O &kbabel; irá procurar a marca a ser introduzida, contando o número de marcas desde o início da tradução.

Editar Inserir uma 'Tag'

  Este sub-menu contém todas as diferentes marcas de formatação encontradas no texto original em inglês. Se seleccionar uma marca, você poderá introduzi-la na posição actual do cursor no texto traduzido.

### Mostrar a diferença

Como foi explicado anteriormente, as aplicações actuais, tentando ser amigáveis, contêm um conjunto de textos descritivos grandes, incluindo a sua formatação. Se um programador alterar uma parte do texto, o sistema do 'gettext' da &GNU; irá, na melhor das hipóteses manter a tradução anterior e marcá-la como aproximada. (No pior dos casos, você irá perder a tradução por completo, dependendo do tamanho das alterações do texto). Isto funciona bem, se um msgid for curto, porque aí poderá encontrar as alterações rapidamente. Agora se o texto for grande o suficiente, você debater-se-á à procura do que foi alterado (por exemplo, poderá ser a mudança apenas de um artigo pela equipa de correcção ortográfica).

Para o ajudar, o &kbabel; poderá pedir para ver o msgid original e mostrar a diferença. As alterações são mostradas graficamente no editor do Texto Original. A forma exacta poderá ser definida na janela de configuração do &kbabel;. O Ferramentas 'Diff' Mostrar as Diferenças irá mostrar as diferenças que foram encontradas. Para ver o texto actual, sem estar misturado com o texto original, use a opção Ferramentas 'Diff' Mostrar o Texto Original .

Você poderá activar ou desactivar a pesquisa automática das diferenças se escolher a opção Ferramentas 'Diff' Modo do 'Diff' . Quando o modo do 'diff' está activo, a procura das diferenças começa quando você for para outra mensagem.

Como sempre, você poderá usar as origens diferentes para procurar a versão anterior do texto, estando todas elas definidas na janela de configuração do &kbabel;:

Base de Dados de Traduções

  Você poderá usar a Base de Dados de Traduções para procurar as diferenças. Recomendamos fortemente que active o armazenamento automático das mensagens traduzidas na Base de Dados de Traduções na janela de configuração da Base de Dados de Traduções . Este modo poderá ser activado pela opção Usar as mensagens da Base de Dados de Traduções .

Árvore dos ficheiros antigos

  Isto só será usado se a procura na Base de Dados de Traduções estiver desactivada. Ao definir a Pasta de base dos ficheiros 'diff' você poderá escolher no &kbabel;, qual o ficheiro a usar nas diferenças. Ele usa a localização relativa do ficheiro aberto e usa essa localização relativa na pasta aqui indicada. Se existir um ficheiro correspondente, este será usado. Para poder utilizar este modo, você deverá fazer uma cópia dos ficheiros antigos antes de cada actualização.

Ficheiro escolhido manualmente

  Se a possibilidade anterior não resultar, você poderá sempre definir manualmente o ficheiro com as diferenças ao escolher a opção Ferramentas'Diff' Abrir Ficheiro para 'Diff'.

A pesquisa das diferenças nem sempre é correcta, porque o ficheiro PO não contém nenhuma referência à mensagem original.

## Formas plurais

Dado que as formas plurais são um assunto bastante complicado, é dedicada uma secção especial ao suporte das mesmas no &kbabel;.

O &kbabel; pode ler as formas plurais da &GNU; apenas, não as podendo editar. Só suporta neste momento a versão para o &kde; das formas plurais.

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

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

A tradução de uma mensagem de uma forma plural terá de ter um formato especial. Deverá conter o número correcto de traduções (uma por cada forma plural), separadas por um fim-de-linha `\n`. Por exemplo, o Selected %n files traduzido para Português ficaria:

    %n ficheiro seleccionado\n
    %n ficheiros seleccionados

Para verificar se a sua tradução contém o número correcto de formas plurais, use a opção Ferramentas Validação Verificar as Formas Plurais (só no KDE) .