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:
- Catálogos. As cadeias de caracteres adicionadas ou modificadas pela alteração, em todos os idiomas.
- Código. As linhas adicionadas pela alteração, referentes a texto e formatação específicos de um idioma ou cultura.
- 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ódigo | Significado | Bloqueia por padrão |
|---|---|---|
missing | A cadeia de caracteres não tem tradução | Sim |
invalid_syntax | A tradução não é válida, por exemplo, ICU corrompido | Sim |
placeholder_mismatch | Os placeholders diferem da origem | Sim |
plural_categories | Falta uma forma plural exigida pelo idioma | Sim |
stale | A origem foi alterada após a tradução da cadeia de caracteres | Nã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ódigo | O que ele encontra | Bloqueia por padrão |
|---|---|---|
hardcoded_text | Texto 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 alertas | Sim |
concatenated_text | Uma frase montada a partir de partes: uma tradução combinada com texto ou um valor por +, um literal de modelo ou elementos vizinhos | Sim |
locale_number | Um número formatado sem a localidade do leitor, como toFixed no código da interface ou toLocaleString() sem localidade | Não |
locale_date | Uma data ou hora formatada sem a localidade do leitor, ou com um padrão fixo como MM/dd/yyyy | Não |
hardcoded_currency | Um símbolo ou código de moeda escrito ao lado de um valor | Não |
ordinal_sort | Texto ordenado ou comparado por código de caractere, ou localeCompare sem localidade | Não |
case_mapping | toUpperCase() ou toLowerCase() em texto sem a localidade | Não |
physical_direction | Esquerda e direita em classes CSS e utilitárias, em um projeto com idioma de direita para esquerda | Não |
postal_code_format | Um CEP validado com o padrão de um país | Não |
phone_number_format | Um número de telefone validado como norte-americano | Não |
latin_only_input | Um nome, cidade, rua ou endereço limitado a a-z | Não |
joined_list | Uma lista lida por pessoas unida por vírgula ou "e" | Não |
calendar_names | Nomes de dias da semana ou meses escritos no código, ou um primeiro dia da semana fixo | Não |
paper_size | Letra, A4 e similares definidos nas configurações de impressão ou PDF | Não |
fixed_unit | Uma unidade como mi, lb ou °F escrita ao lado de um número exibido | Não |
locale_parsing | Um número digitado por uma pessoa lido com parseFloat ou Number | Não |
ime_composition | O enter tratado em uma entrada de texto sem verificar se uma palavra chinesa, japonesa ou coreana ainda está sendo composta | Nã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-ignorecomentá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"]
}
}| Campo | Significado |
|---|---|
exclude | Padrões de arquivos que as regras ignoram |
translate | Funções de tradução além das próprias dos frameworks |
allow | Palavras que nunca são traduzidas, além dos termos protegidos |
formatter, currencies | Definido na etapa Cultura do assistente; veja Cultura |
render | Como 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.
- 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 mainsource 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.