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 a alteração afetou:

  1. Catálogos. As strings que a alteração adicionou ou modificou, em todos os idiomas.
  2. Código. As linhas que a alteração inclui, 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 o 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 strings ausentes ou corrompidas, ou quando o código adicionado insere diretamente o texto lido pelo usuário no código ou monta uma frase a partir de partes. Todo o restante é 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 identifique 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 desative as etapas de código e de página.

Códigos de catálogo

CódigoSignificadoBloqueia por padrão
missingA string não tem traduçãoSim
invalid_syntaxA tradução não é válida, como uma estrutura ICU incorreta, ou exibe um erro de modelo: uma frase cortada, pontuação residual, aspas não fechadas ou palavra duplicadaSim
placeholder_mismatchPlaceholders ou termos protegidos diferem da origem, como um nome de produto escrito duas vezesSim
plural_categoriesFalta uma forma plural necessária para o idiomaSim
staleA origem foi alterada após a tradução da stringNão
obsoleteA origem já não contém a string, ou a página onde ela estavaNã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.

A tradução remove strings obsoletas de todos os idiomas e apaga as traduções de uma página cuja origem desapareceu. Ela apaga apenas os arquivos Coroid traduzidos, nunca uma página que exista em apenas um idioma.

Códigos de código

CódigoO que é encontradoBloqueia 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, toasts e alertasSim
concatenated_textUma frase montada a partir de partes: uma tradução combinada com texto ou um valor por +, uma expressão de template 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 separada 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 processado em um campo 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 lê

A etapa de código analisa JavaScript e TypeScript, incluindo JSX, além de ler modelos Vue, Svelte, Astro, HTML, ERB e Handlebars, bem como CSS como texto. Uma regra é aplicada somente onde seu contexto a indica: um padrão de CEP é reportado apenas ao lado de um campo de CEP, e uma lista unida é detectada 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 nas funções listadas no arquivo de configuração.
  • Nunca texto. Termos protegidos e as palavras permitidas pelo arquivo de configuração.
  • Excluído intencionalmente. Uma linha com um i18n-ignore comentário, e a linha após ela. Indique o motivo: // i18n-ignore: product name.

A seção opcional world de .coroid/i18n.json define o restante:

{
  "world": {
    "exclude": ["src/legacy/**", "scripts/**"],
    "translate": ["translateText", "i18n.translate"],
    "allow": ["Storefront", "OK"]
  }
}
CampoSignificado
excludeConjuntos de arquivos ignorados pelas regras
translateFunções de tradução além das nativas das estruturas
allowPalavras que Nunca são traduzidas, exceto termos protegidos.
formatter, currenciesDefinido na etapa Cultura do assistente; veja Cultura
renderComo iniciar o aplicativo para páginas pseudolocalizadas; veja Pseudo-Localização

Achados e correções

Cada achado é armazenado na execução da verificação e listado na tarefa Problemas encontrados: os achados de catálogo são organizados por catálogo, chave e idioma; os achados de código são organizados por arquivo, linha e texto encontrado; os achados de página são organizados 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.

Nos 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 desenvolvedor recebe cada achado que causa o bloqueio, como src/pricing.tsx:7 hardcoded_text: “Simple pricing”, juntamente com instruções sobre como 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 que a tarefa seja entregue.

Contribuições de todas as fontes

O Coroid Check aplica o mesmo padrão a todas as alterações, independentemente de quem as criou:

  • Os agentes do Coroid Em projetos internacionalizados, todas as tarefas indicam: 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 dos mercados definidas pela Culture.
  • Pull requests geradas por pessoas e outras ferramentas passam pelo Coroid Check, com os mesmos Achados e anotações. Ele é executado em todos os pull request sempre que o aplicativo Coroid GitHub estiver instalado no repositório e a política do projeto for aplicada nas pull requests.
  • Alterações mescladas sem passar pelo Coroid Check são detectadas após o merge. Traduzir strings mescladas fora do Coroid Lê a verificação executada no pull request. Ele cria uma tarefa de tradução para as strings que o pull request deixou faltando ou desatualizadas. Quando a verificação identificou problemas de código bloqueantes, também cria 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 Ele lista isso e arquivos que corrigem tarefas que você inicia ao fazer sua escolha.

Execute por conta própria

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 Ele 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 lê todo o repositório. Ambos os comandos retornam o código de saída 1 ao encontrar algo; adicione --format json para gerar um relatório legível por máquina.