Verificador de placeholders iOS e Flutter

Cole uma string de origem e suas traduções: a ferramenta sinaliza os placeholders removidos, renomeados, com tipo alterado ou fora de ordem, tanto nos formatos da Apple (%@, %1$@, %lld) quanto nas mensagens ICU do Flutter. Grátis, sem cadastro, e seu texto nunca sai do navegador.

Compare os placeholders

Traduções a verificar

Comparado no seu navegador: nada é enviado.

Verifique cada tradução antes da exportação, sem copiar e colar

O LocalePilot é um app desktop que compara automaticamente os placeholders de todas as suas traduções com os da origem (%@, %1$@, %lld, ICU), lista tudo em uma central de QA e bloqueia a exportação até um problema bloqueante ser corrigido. Ele está em fase final para macOS: deixe seu e-mail para saber do lançamento.

O que a ferramenta compara

  • Formatos da Apple: %@, %1$@, %d, %ld, %lld, %.2f, %u, %i e %s, posição por posição. %% é texto.
  • Placeholders ICU do Flutter: {name}, inclusive dentro dos ramos plural e select.

Conversões raras como %e ou %x são ignoradas de propósito, para que um texto como "20%en" não seja tomado por erro.

Os erros mais comuns

  • Um especificador removido: nada trava, mas o nome ou o número some da tela.
  • Um tipo alterado: %lld substituído por %@ lê um inteiro como objeto, com risco de crash.
  • Uma ordem alterada sem posições: para reordenar, numere todos os argumentos (%1$@, %2$@); misturar numerados e não numerados é comportamento indefinido.
  • "20 % de remise" em francês: o espaço antes do sinal de porcentagem, exigido pela tipografia francesa, faz % d ser lido como especificador. Duplique o sinal: %%.
  • Um placeholder ICU renomeado: {count} transformado em {nombre} muda a API de todos os locales no Flutter.

Esses casos estão detalhados no guia sobre especificadores de formato do iOS e no guia sobre placeholders ICU.

Limitações da ferramenta

A ferramenta compara placeholders, não o sentido: ela não detecta dois %@ trocados quando os argumentos não são numerados, nem uma frase mal traduzida. Ela não interpreta o escape de apóstrofos do ICU (a opção use-escaping do Flutter): '{' é lido como uma chave. Ela compara uma string de cada vez; para um arquivo inteiro, use o verificador de chaves ausentes em ARB ou um editor que verifique todas as chaves.

Perguntas frequentes

Quais especificadores de formato do iOS são reconhecidos?

%@, %1$@ (e outras posições), %d, %ld, %lld, %.2f, %u, %i, %s; %% é tratado como texto. Conversões raras como %e ou %x são ignoradas de propósito.

Por que "20 % de remise" é sinalizado?

Em uma string de formato, "% d" é um especificador válido (o espaço é uma flag do printf), então "%lld % de remise" (desconto, em francês) contém dois especificadores para um único argumento. Escreva "%lld %% de remise".

Posso mudar a ordem dos argumentos em uma tradução?

Sim, numerando todos os argumentos: %1$@ é o primeiro, %2$@ o segundo, onde quer que estejam na frase. Em uma mesma string, ou tudo é numerado, ou nada é.

A ferramenta também verifica mensagens ICU do Flutter?

Sim: os placeholders entre chaves são comparados com os da origem, inclusive dentro dos ramos plural e select.

Meu texto é enviado para um servidor?

Não. Suas strings, às vezes ainda não lançadas, são comparadas na página: nada é enviado.

Qual a diferença para o LocalePilot?

Esta ferramenta compara uma string de cada vez. O LocalePilot é um app desktop, em fase final para macOS, que compara todas as chaves dos seus arquivos ARB, .strings e .xcstrings e bloqueia a exportação em caso de problema bloqueante.

Seja avisado no lançamento

O LocalePilot está em fase final. Deixe seu e-mail para saber do lançamento.

  • macOS 12 ou posterior · Ollama ou LM Studio opcionais
  • Interface do app em inglês, francês, espanhol, italiano e português.