Devido ao caráter mundial da Web, internacionalização é uma característica cada vez mais buscada nas aplicações. Essa demanda tornou necessário o surgimento e amadurecimento contínuo de recursos de tradução que nos dias atuais facilitam, por exemplo, o acesso ao conhecimento por pessoas que não dominam outros idiomas além de sua língua materna. O Delphi, no entanto, cuja principal utilização é no desenvolvimento de aplicações desktop, ainda não possui soluções tão maduras.
O ITE (Integrated Translation Environment), presente no Delphi, permite criar aplicações multi-idiomas graças às suas funcionalidades de tradução, porém, esse ambiente não é muito favorável a aplicações de grande porte. Sua manutenção é consideravelmente complexa e, apesar dos arquivos de tradução não serem embutidos, a escolha de idiomas não é tão trivial para o usuário.
Há também no mercado alguns componentes e ferramentas desenvolvidas com esse propósito, como é o caso do componente TLang, que está disponível apenas para aplicações desenvolvidas com FireMonkey. Para a VCL (Visual Component Library) existem soluções semelhantes, porém, o preço de alguns desses componentes pode ultrapassar os US$ 800 para versões Pro Edition.
Neste artigo veremos uma forma mais eficaz e econômica para implementar essa funcionalidade nas aplicações. Serão explicadas as técnicas que podem ser utilizadas e como identificar a mais adequada para cada situação.
As abordagens exploradas neste artigo não se limitam à tradução entre idiomas. Elas podem ser usadas, por exemplo, para criar sistemas com mensagens customizáveis para cada ramo de empresas ou cliente, permitindo com que o usuário final defina os textos a serem utilizados na aplicação.
Nas próximas seções conheceremos alguns dos mecanismos que podem ser utilizados para implementar esse tipo de funcionalidade com o Delphi.
ResourceString
ResourceString é um recurso que permite a criação de uma tabela de strings que funcionarão como constantes dentro da aplicação. Essa estrutura é muito utilizada internamente pelo Delphi na montagem de mensagens do IDE. Por exemplo, na unit const há exemplos de sua utilização. Os componentes também adotam esse método, evitando assim a utilização da declaração de um texto diretamente no código. Por exemplo, para a apresentação do termo "Open" em caixas de diálogo é utilizada a constante SOpenFileTitle.
Essa técnica facilita a manutenção e extensão do sistema, pois quando houver necessidade, não será preciso trocar o texto fixo em todos os lugares onde ele ocorre. Bastaria alterar seu valor na definição da constante e automaticamente essa mudança seria refletida em toda a aplicação.
Na Listagem 1 vemos um exemplo da declaração de um ResourceString.
Listagem 1. Declaração de ResourceString
01 ResorceString
02 sCaptionMinhaAplicacao = 'Meu Caption';
03 sCaptionBtnAbrir = 'Abrir';
04 sMsgFecharAplicacao = 'Deseja encerrar a aplicação';
Um ResourceString pode ser declarado em qualquer lugar do projeto, ficando no mesmo contexto das declarações de constantes e variáveis. Para uma melhor organização e aproveitamento do código, no entanto, é uma boa prática fazer essa declaração em uma unit separada, deixando todos em um só local, ou separando por contexto/objetivo.
Para acessarmos os valores definidos nos ResourceStrings basta referenciá-los pelos nomes que foram usados na sua declaração. Por exemplo, considerando as constantes da Listagem 1, poderíamos exibir a mensagem de confirmação de saída da aplicação da seguinte forma:
ShowMessage(sMsgFecharAplicacao);
Em todos os pontos do sistema onde for preciso confirmar a saída da aplicação não precisaremos repetir a mensagem na forma de string fixo, basta utilizar a constante sMsgFecharAplicacao. Além de evitar erros ortográficos nas demais mensagens, essa prática ajuda a manter a padronização dos textos, o que é também importante para oferecer uma boa experiência de uso.
Ao utilizar ResourceStrings, principalmente em arquivos externos, temos ainda os seguintes benefícios:
· Todos os programas que compõem a sua aplicação poderão utilizá-los sem que precisem ser reescritos;
· As mensagens podem ser formatadas para receberem parâmetros, aumentando ainda mais a padronização e estruturação do seu código.
Traduzindo a aplicação com ResourceString
Uma das formas de tradução utilizando o ResourceString é aplicada nas próprias mensagens do Delphi com a substituição dos arquivos de ResourceString originais. Porém isso pode ocasionar problemas ao atualizar a versão do IDE, pois será necessário alterar novamente esses arquivos. Além disso, pode ser que uma string não esteja mais na mesma unit que na versão anterior.
A outra forma é a criação de uma unit que altera os valores dos itens desejados para os novos. Esse será o conceito abordado nesse tópico, e para entender sua implementação crie um novo projeto e a partir do menu File > New > VCL Forms Application. No form principal, adicione um TButton e altere sua propriedade Caption para "Clique Aqui" e seu nome para BtnSaudacao.
Em seguida, crie no projeto uma pasta chamada Idiomas e a ela adicione uma nova unit chamada dicionário, onde deve ser implementado o ResourceString que pode ser visto na Listagem 2.
...