Documentação

A verificação de Globalização

Verifique se há traduções ausentes ou corrompidas em todas as alterações, além de textos e formatações em código novo que assumam um único idioma ou cultura; quando configurado, também verifique páginas que apresentem falhas em outros idiomas.

O Globalização A verificação no Controle de Qualidade mantém um projeto internacionalizado pronto para o mundo. Ela é executada na QA de tarefas e nos pull requests, analisando apenas o que foi alterado:

  1. Catálogos. As cadeias de caracteres adicionadas ou modificadas pela alteração, em todos os idiomas.
  2. Código. As linhas adicionadas pela alteração, referentes a texto e formatação específicos de um idioma ou cultura.
  3. Páginas. Quando o projeto define como iniciar seu aplicativo, suas páginas são renderizadas com uma pseudotradução.

O assistente ativa a verificação por padrão assim que seu pull request for mesclado. Suas configurações estão em Controle de Qualidade → Globalização; a área de trabalho do Configurações indica se está ativado.

O que bloqueia por padrão

Uma alteração retorna para correção quando deixa cadeias de caracteres faltando ou corrompidas, ou quando o código adicionado insere diretamente o texto lido pelas pessoas no código ou monta uma frase a partir de partes. Tudo o mais é relatado como uma ocorrência e não bloqueia nada até que você opte por bloquear. Ocorrências de formatação, ordenação e layout permanecem registradas até que o projeto as observe em seu próprio código.

Escolha o que bloqueia em Controle de Qualidade → Globalização: os códigos de catálogo, O que no código faz uma alteração retornar, e Problemas de página que fazem uma alteração retornar para correção. Verificar código-fonte e Renderizar páginas desativam as etapas de código e de página.

Códigos de catálogo

CódigoSignificadoBloqueia por padrão
missingA cadeia de caracteres não tem traduçãoSim
invalid_syntaxA tradução não é válida, por exemplo, ICU corrompidoSim
placeholder_mismatchOs placeholders diferem da origemSim
plural_categoriesFalta uma forma plural exigida pelo idiomaSim
staleA origem foi alterada após a tradução da cadeia de caracteresNão

O glossário, as regras de comprimento e de termos proibidos informam seus próprios códigos quando seu arquivo de configuração os define.

Códigos de código

CódigoO que ele encontraBloqueia por padrão
hardcoded_textTexto lido por uma pessoa inserido no código em vez do catálogo: texto JSX e de modelo, atributos visíveis como placeholder, title, alt e aria-label, mensagens toast e alertasSim
concatenated_textUma frase montada a partir de partes: uma tradução combinada com texto ou um valor por +, um literal de modelo ou elementos vizinhosSim
locale_numberUm número formatado sem a localidade do leitor, como toFixed no código da interface ou toLocaleString() sem localidadeNão
locale_dateUma data ou hora formatada sem a localidade do leitor, ou com um padrão fixo como MM/dd/yyyyNão
hardcoded_currencyUm símbolo ou código de moeda escrito ao lado de um valorNão
ordinal_sortTexto ordenado ou comparado por código de caractere, ou localeCompare sem localidadeNão
case_mappingtoUpperCase() ou toLowerCase() em texto sem a localidadeNão
physical_directionEsquerda e direita em classes CSS e utilitárias, em um projeto com idioma de direita para esquerdaNão
postal_code_formatUm CEP validado com o padrão de um paísNão
phone_number_formatUm número de telefone validado como norte-americanoNão
latin_only_inputUm nome, cidade, rua ou endereço limitado a a-zNão
joined_listUma lista lida por pessoas unida por vírgula ou "e"Não
calendar_namesNomes de dias da semana ou meses escritos no código, ou um primeiro dia da semana fixoNão
paper_sizeLetra, A4 e similares definidos nas configurações de impressão ou PDFNão
fixed_unitUma unidade como mi, lb ou °F escrita ao lado de um número exibidoNão
locale_parsingUm número digitado por uma pessoa lido com parseFloat ou NumberNão
ime_compositionO enter tratado em uma entrada de texto sem verificar se uma palavra chinesa, japonesa ou coreana ainda está sendo compostaNão

Design para todos os mercados mostra a correção para cada caso.

O que a verificação analisa

A etapa de código analisa JavaScript e TypeScript, com JSX, e lê modelos Vue, Svelte, Astro, HTML, ERB e Handlebars, além de CSS como texto. Uma regra é aplicada somente onde seus nomes de contexto a indicam: um padrão de CEP é relatado apenas ao lado de um campo de CEP, e uma lista unida apenas onde as pessoas a leem.

  • Traduzido por definição. Texto dentro das chamadas de tradução e componentes do projeto (t(), formatMessage, <Trans>, <FormattedMessage>, $t()) e as funções listadas no arquivo de configuração.
  • Nunca texto. Termos protegidos e as palavras permitidas pelo arquivo de configuração.
  • Deixado de fora de propósito. Uma linha com um i18n-ignore comentário, e a linha após ele. Indique o motivo: // i18n-ignore: product name.

O opcional world trecho de .coroid/i18n.json define o restante:

{
  "world": {
    "exclude": ["src/legacy/**", "scripts/**"],
    "translate": ["translateText", "i18n.translate"],
    "allow": ["Storefront", "OK"]
  }
}
CampoSignificado
excludePadrões de arquivos que as regras ignoram
translateFunções de tradução além das próprias dos frameworks
allowPalavras que nunca são traduzidas, além dos termos protegidos
formatter, currenciesDefinido na etapa Cultura do assistente; veja Cultura
renderComo iniciar o aplicativo para páginas em Localização falsa; veja Localização falsa

Achados e reparos

Cada achado é armazenado no registro da verificação e listado na tarefa de Problemas encontrados: os achados são organizados por catálogo, chave e idioma; os achados de código são listados por arquivo, linha e texto encontrado; os achados de página são agrupados por página, elemento e texto. Um achado é considerado corrigido quando a última verificação do mesmo trabalho não o detecta mais.

Traduzir texto de checkoutTarefa
Problemas encontrados
  • Abrirui · checkout.total · fr: missingGlobalização · Não traduzido
  • Em processo de correçãosrc/pricing.tsx:7 · “Preços simples”Globalização · Texto escrito diretamente no código
  • Abrir/{locale}/ · p#promo · “Frete grátis em todos os pedidos” · runtime_text (de-DE, ar-SA)Globalização · Texto que não veio do catálogo
  • Em processo de correçãoui · cart.items · ja: placeholder_mismatchGlobalização · Os placeholders diferem da origem
  • Corrigidoui · cart.count · ar: plural_categoriesGlobalização · Formas plurais ausentes para esta localidade

Resultados de qualidade da verificação de Globalização: strings do catálogo, uma alteração no código e uma página pseudotraduzida, um código de problema por resultado. Dados ilustrativos.

Nas pull requests, os achados de código também aparecem como anotações nas linhas alteradas: um erro quando bloqueiam a entrega, um aviso quando são apenas reportados.

Quando a verificação bloqueia uma tarefa, o agente de desenvolvedor recebe cada achado que a impede, como src/pricing.tsx:7 hardcoded_text: “Simple pricing”, juntamente com instruções para corrigi-lo. Ele conserta traduções por meio de uma sessão de tradução específica para a tarefa, nunca editando manualmente catálogos de outros idiomas. O texto é movido para o catálogo de origem, frases montadas são reescritas como uma única mensagem com placeholders, e as regras de código são aplicadas à própria alteração antes de entregar a tarefa.

Contribuições de todas as fontes

A verificação aplica o mesmo padrão a todas as alterações, independentemente de quem as tenha feito:

  • Agentes do Coroid Para quem trabalha em um projeto internacionalizado, cada tarefa indica claramente: o catálogo de origem e a função de tradução, uma mensagem por frase, o formatador do projeto, o layout lógico para idiomas escritos da direita para a esquerda e as convenções de mercado definidas pela Cultura.
  • Pull requests provenientes de pessoas e outras ferramentas passam pela verificação do Coroid Check, com os mesmos achados e anotações. Ative Revisar cada PR para executá-lo em cada pull request.
  • Alterações mescladas sem passar pela verificação são detectadas após o merge. Traduzir strings mescladas fora do Coroid lê a verificação realizada no pull request. Ele cria uma tarefa de tradução quando há strings ausentes ou desatualizadas. Quando a verificação bloqueou achados de código, também gera uma tarefa chamada Internacionalizar o código mesclado no pull request, indicando onde procurar. Cada merge gera no máximo uma tarefa de cada tipo.

O código existente nunca é bloqueado: Prontidão global lista essas informações e cria tarefas de correção que você pode iniciar conforme desejar.

Execute você mesmo

O mecanismo é a ferramenta de linha de comando coroid-i18n, cuja versão está definida no seu arquivo de configuração:

coroid-i18n check                       # catalogues
coroid-i18n source --changed main       # the code a branch adds since main
coroid-i18n check --source --changed main

source lê o código sem precisar consultar os catálogos, portanto funciona mesmo quando eles ainda não foram configurados. Sem --changed ou --diff ele analisa todo o repositório. Ambos os comandos retornam o código de saída 1 ao detectar algum problema; adicione --format json para obter um relatório legível por máquina.