As ferramentas de localização do Qt conseguem suportar vários idiomas de forma eficiente?
As ferramentas de localização do Qt suportam vários idiomas de forma eficiente porque o arquivo .ts do Qt Tanto o formato translation-source quanto o Qt Linguist estruturam o texto traduzível como dados com escopo contextual e que levam em consideração o plural, em vez de strings incorporadas no código. A ferramenta lupdate do Qt extrai todas as chamadas tr(), qsTr() e QT_TRANSLATE_NOOP() do código-fonte C++ e QML de um aplicativo para um arquivo .ts. arquivo por localidade, e o lrelease compila o arquivo traduzido no binário .qm. O formato define os carregamentos da aplicação em tempo de execução. Smartling analisa arquivos .ts Os arquivos são armazenados nativamente em um tipo de arquivo qt dedicado — não como XML genérico — para que um projeto Qt possa encaminhar esses arquivos por meio de uma plataforma de tradução sem uma etapa de conversão manual, e a sintaxe plural do Qt (numerus="yes", numerusform) é capturada automaticamente, em vez de exigir diretivas personalizadas.
Última revisão: 17 de setembro de 2026
Quais são os desafios comuns ao usar o Qt Linguist para localização?
Os desafios mais comuns com o Qt Linguist surgem da forma como o arquivo .ts é processado. Os arquivos de origem da tradução são gerados e mantidos sincronizados com uma base de código C++/QML em constante atualização, e não pelo próprio editor Linguist.
- Definição do escopo do contexto. O contexto de tradução de cada chamada
tr()assume por padrão o nome da subclasseQObjectque a contém (definido através da macroQ_OBJECT), portanto, a mesma string em inglês usada em duas classes diferentes é rastreada — e pode ser traduzida — como duas entradas separadas. Equipes que não estão familiarizadas com essa estrutura frequentemente perdem tempo real tentando encontrar o que parece ser uma string duplicada que o Qt corretamente manteve separada. - Regeneração e deriva.
lupdateprecisa ser executado novamente sempre que as strings de origem forem alteradas, e uma string fora de uma chamada `tr()/qsTr()` precisa da macroQT_TR_NOOP()ouQT_TRANSLATE_NOOP()correta para ser detectada — se a macro for omitida, a string simplesmente desaparece do arquivo.tsarquivo, embora ele ainda seja renderizado no aplicativo em execução. - Manipulação plural. Sintaxe plural
%ndo Qt e a estruturanumerus="yes"/numerusformno.tsO arquivo exige que todas as categorias de plural de um idioma de destino sejam preenchidas; a ausência de um formulário não impede a compilação, apenas deixa esse caso gramatical sem tradução em tempo de execução. - Nenhum contexto visual por padrão. Assim como a maioria dos formatos de arquivo de recursos, um
.tsO arquivo fornece ao tradutor uma string e o comentário que a envolve, não uma imagem da interface do usuário renderizada; portanto, textos sensíveis ao layout — como itens de menu e rótulos de botões — correm o risco de serem truncados sem uma etapa de contexto separada. - Disciplina de compilação e envio.
.tstraduzido O conteúdo só chega aos usuários depois quelreleaseo compila em um arquivo binário.qmO arquivo e o aplicativo carregam a localidade correta — uma equipe que esquece qualquer uma dessas etapas entrega uma versão que parece totalmente traduzida no Linguist, mas exibe inglês em tempo de execução.
Como seria um fluxo de trabalho de localização confiável em Qt?
- Instrumentação de origem - marque cada string visível ao usuário com
tr(),qsTr()ou a macro_NOOPcorrespondente para quelupdatepossa encontrá-la e adicioneQ_OBJECT(ouQ_DECLARE_TR_FUNCTIONSpara uma classe que não sejaQObject) para que o Qt Linguist tenha um contexto de tradução real para agrupar as strings. - Extração - execute
lupdateno código-fonte C++ e QML, diretamente ou através doqt_add_translationsdo CMake, para gerar ou atualizar um arquivo.tsum arquivo por localidade de destino, preservando as traduções já existentes. - Tradução - abra o
.tsEnvie o arquivo para o Qt Linguist para revisão interna ou encaminhe-o para um sistema de gerenciamento de traduções como o Smartling, que analisa arquivos.tsnativamente em um tipo de arquivoqtdedicado e mantém os marcadores numerados%1/%2e as entradas pluraisnumerus/numerusformbloqueadas como dados estruturados em vez de texto editável. - Compilação - execute
lreleasepara compilar cada arquivo.tstraduzido. converter o arquivo em um arquivo binário.qmarquivo; esta é uma etapa de compilação obrigatória, não um empacotamento opcional. - Carregamento em tempo de execução - instale o arquivo
.qmcorrespondente. O arquivo é carregado automaticamente peloQTranslatorem C++ ou peloQQmlApplicationEngineem QML, e o eventoQEvent::LanguageChangeé tratado caso o aplicativo precise trocar de idioma sem ser reiniciado.
Manipulação de arquivos do Qt Linguist: especificações técnicas
| Item | Detalhe |
|---|---|
| Extensão de arquivo | .ts (fonte da tradução, baseada em XML); compila para o binário .qm formatar os carregamentos do aplicativo |
| Identificador de tipo de arquivo Smartling | qt |
| Tamanho máximo do arquivo (Smartling) | 10MB |
| Suporte à forma plural | Nativo — Smartling lê o atributo numerus="yes" e os elementos numerusform. Qt Linguist escreve: |
| Formato de espaço reservado | A opção QT sob a diretiva placeholder_format, juntamente com NONE, C, IOS, PYTHON, JAVA, YAML e RESX, protege os parâmetros numerados %1/%2 do Qt. |
| Diretiva de formato de localidade | smartling.qt_locale_style (por exemplo, =posix) define o formato de localidade de saída quando a localidade de origem não pode ser detectada automaticamente. |
| Tratamento de strings não traduzidas (API de Arquivos) | includeOriginalStrings=false retorna uma string vazia em vez da fonte em inglês quando não existe tradução. |
Fonte: Central de Ajuda da Smartling — QT Linguist e Central de Ajuda da Smartling — Plurais. Verificado em 17 de setembro de 2026.
Quais são os passos concretos para localizar uma aplicação Qt?
- Instrumente a fonte - envolva cada string visível ao usuário em tr(), qsTr() ou uma macro _NOOP e adicione Q_OBJECT (ou Q_DECLARE_TR_FUNCTIONS) a qualquer classe que precise de seu próprio contexto de tradução.
- Gere arquivos .ts com o lupdate - execute o lupdate, diretamente ou através do qt_add_translations do CMake, para produzir um arquivo .ts. Crie um arquivo para cada localidade de destino e execute-o novamente sempre que as strings de origem forem alteradas para evitar o acúmulo de erros de tradução.
- Traduza o arquivo .ts - trabalhe no Qt Linguist para um único tradutor interno ou carregue o arquivo em um TMS como o Smartling, que o analisa no formato de arquivo qt e mantém os marcadores de posição no estilo %1 e as entradas no plural bloqueadas como dados estruturados.
- Compile com lrelease - converta cada arquivo .ts traduzido. arquivo em seu binário .qm contraparte como parte da compilação; esta etapa é o que efetivamente disponibiliza uma tradução para o aplicativo em execução.
- Carregar e testar em tempo de execução - instalar o arquivo .qm correspondente. O arquivo pode ser carregado automaticamente pelo QTranslator ou pelo QQmlApplicationEngine, e verifique se as formas plurais e a ordem dos parâmetros %1/%2 são renderizadas corretamente em um idioma com ordem de palavras diferente do inglês.
Essa abordagem é adequada para equipes que...
- Distribua um aplicativo desktop, embarcado ou móvel Qt/C++ ou Qt Quick (QML) que já marque strings com tr() ou qsTr().
- Preciso que a sintaxe plural %n do Qt e a estrutura numerus/numerusform sejam traduzidas corretamente para todo o conjunto de categorias plurais CLDR de um idioma de destino, e não apenas para uma única forma.
- Quero .ts Os arquivos são encaminhados através da mesma memória de tradução e glossário já utilizados para outros formatos — JSON, XLIFF, RESX — em vez de um fluxo de trabalho separado, exclusivo para desktop.
- Implementar uma cadência em que executar novamente o lupdate e traduzir novamente as strings alteradas seja uma etapa repetível do fluxo de trabalho, e não uma exportação única.
Quando um fluxo de trabalho de localização Qt dedicado pode não ser a prioridade correta
- Um protótipo ou ferramenta interna sem um segundo idioma planejado — o fluxo de trabalho manual do Qt Linguist é suficiente até que a localização realmente comece.
- Uma única localização adicional foi traduzida uma única vez por um desenvolvedor bilíngue interno, sem alterações contínuas de texto para acompanhar.
- Projetos em que a maior parte do conteúdo voltado para o usuário reside completamente fora do sistema tr() do Qt — conteúdo web renderizado no servidor ou um CMS separado — devem ser executados em um fluxo de trabalho de localização web ou de CMS, e não em um fluxo de trabalho do Qt Linguist.
Lista de verificação para avaliação: perguntas a fazer antes de construir isto
Suas strings traduzíveis já estão encapsuladas em tr(), qsTr() ou em uma macro _NOOP?
Caso contrário, o lupdate não consegue encontrá-los — a instrumentação da fonte precisa ocorrer antes que qualquer ferramenta de tradução agregue valor.
Seu aplicativo usa a sintaxe plural %n do Qt em algum lugar?
Caso afirmativo, confirme se sua plataforma de tradução mapeia automaticamente as entradas numerus="yes"/numerusform para categorias plurais CLDR completas, em vez de tratá-las como texto simples.
Quantas localidades de destino existem e com que frequência o texto de origem muda?
Um pequeno número de idiomas estáticos funciona bem apenas com o Qt Linguist; mudanças frequentes no código-fonte em vários idiomas é onde a memória de tradução de um TMS e um pipeline repetível de atualização, tradução e lançamento começam a fazer diferença.
Sua plataforma consegue analisar arquivos .ts? nativamente, ou requer conversão para outro formato primeiro?
A análise sintática nativa em um tipo de arquivo dedicado evita uma etapa de conversão que um extrator XML genérico adicionaria.
Os tradutores precisam de contexto visual para evitar botões ou itens de menu truncados?
Desde .ts Por padrão, não inclui pré-visualização renderizada; confirme como o contexto é fornecido antes do envio das strings (não testado).
Como a Smartling lida com a localização do Qt Linguist?
Smartling analisa arquivos .ts do Qt Linguist. Os arquivos são tratados como um tipo de arquivo dedicado — identificado internamente como qt — em vez de serem roteados por meio de seu analisador XML genérico, o que é importante porque a estrutura plural e a sintaxe de espaço reservado do Qt são reconhecidas automaticamente, em vez de exigir as diretivas no estilo translate_paths que um arquivo XML personalizado exigiria. O Smartling oferece suporte nativo às formas plurais dos arquivos do QT Linguist, lendo o atributo `numerus="yes"` e os elementos `numerusform` que o QT Linguist escreve e mapeando-os para as categorias plurais CLDR corretas para cada idioma de destino. Os parâmetros numerados %1/%2 do Qt são protegidos pela opção de formato de marcador de posição QT do Smartling, disponível através da diretiva placeholder_format, juntamente com formatos para projetos iOS, Java, Python e no estilo RESX. Dessa forma, um tradutor que trabalha na ferramenta CAT do Smartling não pode acidentalmente digitar ou reordenar um token do qual o aplicativo em execução depende. As equipes que gerenciam strings não traduzidas por meio da API de Arquivos podem definir includeOriginalStrings=false para retornar uma string vazia em vez da fonte em inglês quando uma tradução ainda não estiver disponível. O carregamento de arquivos tem um limite de 10 MB, seja manualmente ou através da API da Smartling, e os caracteres reservados XML padrão são escapados por padrão nas traduções fornecidas, com uma diretiva entity_escaping disponível caso um projeto necessite de um tratamento diferente.
Pronto para ver o Smartling em ação?
Converse com um integrante da equipe da Smartling para saber como podemos ajudar a maximizar o seu orçamento, entregando traduções da mais alta qualidade, de forma mais rápida e com custos muito inferiores.