Uma nova string é traduzida em segundo plano após a primeira página que a utiliza, e uma edição no painel chega ao seu servidor em execução por um push assinado ou por uma verificação a cada 60 segundos por idioma. Um site estático capta ambos apenas quando você reconstrói.
Novas strings
- Uma página chama
t()com texto que não tem tradução. O visitante recebe o texto original. - Após a resposta, a integração relata as strings perdidas para o Universally em lotes de 500. Em runtimes que oferecem
waitUntil, o relatório é concluído após o envio da resposta. - O Universally retorna as traduções que já possui e traduz o restante em segundo plano.
- As novas traduções chegam ao seu servidor em um relatório posterior (uma string perdida é relatada novamente na próxima renderização) ou quando esse idioma é recarregado.
Na prática, uma nova string é traduzida um ou dois segundos após sua primeira renderização. Relatórios não são enviados durante as builds.
Edições no painel
Traduções automáticas não alteram a época de cache de um idioma. Edições no painel alteram, e dois mecanismos as levam ao seu servidor.
Push. O Universally envia um POST assinado para https://{seu domínio do projeto}/_universally/revalidate quando você:
- edita uma string, a verifica ou desverifica, ou a exclui
- restaura uma revisão ou retaduz
- verifica ou exclui em massa
- exclui uma string de origem
- limpa o cache
A integração responde à solicitação antes do roteamento do Astro, então você não adiciona nenhuma página ou rota. O push expira após 3 segundos e as falhas são apenas registradas, portanto, para edições instantâneas, o endpoint precisa ser acessível pela internet. Pushes são enviados apenas no modo SDK.
Polling. Após uma resposta localizada, a integração verifica se a época de cache de um idioma mudou, no máximo uma vez a cada revalidateSeconds (60 por padrão) por idioma. A verificação solicita uma única linha. Em caso de alteração, ela recarrega esse idioma e registra universally: reloaded N translations for X at cache epoch E. Definir revalidateSeconds como 0 desativa o polling, e o servidor mantém suas traduções até que um push chegue ou ele reinicie. Veja Opções de integração do Astro.
Edições que você faz na tela Traduções viajam desta forma. Veja Editar traduções manualmente.
Quando as traduções carregam
| Evento | O que carrega |
|---|---|
| Início do servidor de desenvolvimento | Catálogo de cada idioma |
| Início da build | Catálogo de cada idioma |
| Primeira solicitação localizada em um servidor que não executou nenhuma das anteriores (por exemplo, o servidor Node compilado) | Catálogo de cada idioma. Essa solicitação espera por ele. |
| Push ou época de cache alterada | Os idiomas que mudaram |
Se um idioma falhar ao carregar, o log mostrará universally: could not preload .... Esse idioma não é retentado ou consultado até que o processo seja reiniciado, então corrija a causa e reinicie.
Idiomas
A lista de idiomas é lida uma vez, quando sua configuração do Astro é executada. Adicionar um idioma ou ativar o switch Ativo dele não envia nenhum push, então reinicie o servidor de desenvolvimento ou reconstrua antes que o novo prefixo funcione.
Sites estáticos
Uma build estática não tem código de servidor após a build: sem polling e sem endpoint de push. Edições do painel aparecem somente após você reconstruir e reimplantar. A própria build envia tudo o que perdeu em uma chamada bloqueante, então imprime N novas strings traduzidas. Reconstrua para incluí-las., então uma segunda build coloca essas strings no HTML.
Várias instâncias de servidor
Cada instância mantém seu próprio catálogo em memória. Um push atinge a instância que o atende, e as outras se atualizam consultando. Mantenha revalidateSeconds em um atraso que você esteja feliz em esperar.
Quando o limite de palavras é atingido
Uma vez que as palavras pré-pagas do projeto são usadas, Universally retorna apenas strings que já possui. A integração registra universally: word limit reached, {variant} keeps serving source text uma vez por idioma. Strings traduzidas continuam sendo exibidas. Após adicionar palavras, strings ausentes são relatadas novamente em sua próxima renderização. Veja Limites de uso.