O suporte a múltiplos idiomas em uma aplicação é uma característica essencial para atender a um público global diversificado. A biblioteca Qt oferece recursos poderosos para facilitar a internacionalização de um software, permitindo que as mensagens sejam traduzidas e exibidas em diferentes idiomas. Neste artigo, vamos explorar passo a passo como criar uma aplicação Qt com suporte a múltiplos idiomas, abordando desde as alterações necessárias no código fonte até como compilar e executar a aplicação em diferentes idiomas.
- Alterações no código fonte: Para tornar uma aplicação Qt com suporte a múltiplos idiomas, é necessário modificar a forma como as strings são exibidas no código fonte. Em vez de escrever as mensagens diretamente no código, utilizaremos um sistema de tradução baseado em arquivos de tradução (.ts). Para isso, devemos substituir as strings no código-fonte por chamadas à função tr(), que faz parte da classe QCoreApplication. Essa função recebe a string a ser traduzida e retorna a versão traduzida, caso exista uma tradução disponível.
Por exemplo, em vez de:
QString mensagem = "Olá, mundo!";
Utilizamos:
QString mensagem = tr("Olá, mundo!");
- Compilando o código fonte: Após realizar as alterações necessárias no código fonte, precisamos compilar os arquivos de tradução (.ts) para gerar os arquivos binários (.qm) que serão usados pela aplicação em tempo de execução. Para isso, utilizamos a ferramenta lrelease, que faz parte do Qt Linguist. O comando a seguir ilustra como compilar os arquivos de tradução:
lrelease <nome_do_arquivo.ts>
Esse comando gerará um arquivo binário (.qm) correspondente ao arquivo de tradução.
- Armazenamento de mensagens traduzidas: Os arquivos binários (.qm) gerados no passo anterior contêm as mensagens traduzidas para cada idioma suportado pela aplicação. Esses arquivos devem ser armazenados em uma pasta específica do projeto. O diretório padrão para armazenar os arquivos de tradução é “translations” dentro da estrutura do projeto.
- Definindo o idioma da aplicação durante a inicialização: Para definir o idioma da aplicação durante a inicialização, podemos utilizar a classe QTranslator. É necessário carregar o arquivo binário correspondente ao idioma desejado e instalá-lo como o tradutor padrão da aplicação. O seguinte código ilustra como realizar essa configuração:
QTranslator translator;
translator.load("translations/app_<idioma>.qm"); // substitua <idioma> pelo código do idioma desejado
QCoreApplication::installTranslator(&translator);
Essas linhas de código devem ser executadas antes de criar a janela principal da aplicação.
- Alterando o idioma durante a execução: Para permitir que o usuário altere o idioma da aplicação enquanto ela está em execução, podemos adicionar um menu suspenso (combobox) ou qualquer outra interface para selecionar o idioma desejado. Ao selecionar um novo idioma, o arquivo binário correspondente deve ser carregado e instalado como o tradutor padrão da aplicação. Isso pode ser feito utilizando a mesma lógica apresentada anteriormente para definir o idioma durante a inicialização. Aqui está o código para alterar o idioma durante a execução:
void MainWindow::changeLanguage(const QString& languageCode) {
QTranslator translator;
translator.load("translations/app_" + languageCode + ".qm");
QCoreApplication::installTranslator(&translator);
// Reiniciar a interface ou atualizar as strings traduzidas
// Exemplo: atualizarLabels();
No exemplo acima, a função changeLanguage
recebe o código do idioma selecionado e carrega o arquivo binário correspondente usando o método load
da classe QTranslator
. Em seguida, o tradutor é instalado utilizando o método installTranslator
da classe QCoreApplication
. Após alterar o tradutor padrão, é possível reiniciar a interface ou atualizar as strings traduzidas para refletir o novo idioma.
É importante mencionar que é necessário implementar a lógica para atualizar as strings traduzidas na interface, caso a mudança de idioma ocorra enquanto a aplicação estiver em execução. Isso pode envolver a atualização de rótulos, botões, mensagens de erro, entre outros elementos da interface.
Conclusão: Neste artigo, abordamos o processo de criação de uma aplicação Qt com suporte a múltiplos idiomas. Exploramos as alterações necessárias no código fonte, como substituir as strings por chamadas à função tr()
, e discutimos como compilar os arquivos de tradução para gerar os arquivos binários utilizados pela aplicação.
Além disso, explicamos onde as mensagens traduzidas são armazenadas, recomendando a criação de uma pasta “translations” dentro do projeto para manter os arquivos de tradução.
Demonstramos como definir o idioma da aplicação durante a inicialização, carregando e instalando o arquivo binário correspondente usando a classe QTranslator
. Também mostramos como alterar o idioma durante a execução, carregando um novo arquivo binário e atualizando as strings traduzidas na interface.
Com o suporte a múltiplos idiomas, sua aplicação Qt será capaz de alcançar um público global, oferecendo uma experiência localizada para usuários de diferentes regiões e culturas.
Para criar manualmente a estrutura de diretórios e arquivos do projeto, os arquivos de tradução (*.ts) devem ser colocados em uma pasta específica, geralmente chamada de “translations” dentro do diretório do projeto. Essa pasta deve estar no mesmo nível do diretório que contém os arquivos de código-fonte e recursos da aplicação.
Aqui está um exemplo de estrutura de diretórios:
MeuProjeto/
├── src/
│ ├── main.cpp
│ └── MainWindow.cpp
├── resources/
│ ├── imagens/
│ │ └── logo.png
│ └── qml/
│ └── tela.qml
└── translations/
├── app_en.ts
├── app_fr.ts
└── app_es.ts
No exemplo acima, a pasta “translations” foi criada para armazenar os arquivos de tradução. Cada arquivo de tradução possui um nome específico, no formato “app_<idioma>.ts”, onde “<idioma>” representa o código do idioma correspondente.
Os arquivos de tradução (*.ts) contêm as mensagens a serem traduzidas. Eles podem ser criados e editados utilizando a ferramenta Qt Linguist, que é fornecida com o Qt. Os arquivos de tradução são arquivos XML que seguem uma estrutura específica definida pelo formato de tradução do Qt.
Dentro de um arquivo de tradução (*.ts), você encontrará tags <context>
, <name>
e <message>
que definem o contexto, o nome da mensagem e a própria mensagem a ser traduzida.
Aqui está um exemplo simplificado de um arquivo de tradução (*.ts):
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="pt_BR">
<context>
<name>MainWindow</name>
<message>
<location filename="../src/MainWindow.cpp" line="12"/>
<source>Hello, world!</source>
<translation>Olá, mundo!</translation>
</message>
</context>
</TS>
No exemplo acima, temos uma mensagem a ser traduzida que diz “Hello, world!” e a tradução correspondente em português “Olá, mundo!”. O nome do contexto (context) é “MainWindow” e a mensagem está localizada no arquivo “MainWindow.cpp” na linha 12.
Você pode adicionar várias mensagens a um arquivo de tradução, agrupando-as por contexto. Isso ajuda a garantir que as traduções sejam aplicadas corretamente em diferentes partes da aplicação.
Após criar ou editar os arquivos de tradução (.ts), você precisará compilá-los para gerar os arquivos binários (.qm) que serão usados pela aplicação em tempo de execução, conforme mencionado anteriormente no artigo.
É importante ressaltar que o Qt Linguist fornece uma interface gráfica para editar os arquivos de tradução (*.ts), o que facilita o processo de tradução e gerenciamento das mensagens.