Esta página lista cada opção que você pode passar para universally({...}) em astro.config.mjs, a variável de ambiente que define cada uma e o formato do endpoint de push.
Opções
| Opção | Variável de ambiente | Padrão | Notas |
|---|---|---|---|
modo |
UNIVERSALLY_MODE |
'sdk' |
'sdk' ou 'proxy', sem diferenciação de maiúsculas e minúsculas. Qualquer outro valor gera um erro quando a configuração é executada. Veja Astro com subdomínios de idioma. |
apiKey |
UNIVERSALLY_API_KEY |
nenhum, obrigatório | A chave de 64 caracteres da página de Configuração do projeto. Uma chave sk_ também autentica. Uma chave pk_ falha na chamada de idiomas e na compilação. |
apiUrl |
UNIVERSALLY_API_URL |
https://api.universally.com |
De onde os idiomas e catálogos são lidos. |
translatorUrl |
UNIVERSALLY_TRANSLATOR_URL |
https://translator.universally.com |
Para onde novas strings são reportadas. |
revalidateSeconds |
UNIVERSALLY_REVALIDATE_SECONDS |
60 |
Menor intervalo entre duas verificações de edições no painel, por idioma. 0 ou um número negativo desliga o polling. Um valor de ambiente não numérico é ignorado e o padrão é aplicado. |
hreflang.format |
nenhum | 'variant' |
'variant', 'lang' ou uma função. Qualquer outra string se comporta como 'variant'. |
hreflang.xDefault |
nenhum | verdadeiro |
Adiciona um link x-default à página de origem. Apenas false o desativa. |
switcher |
nenhum | verdadeiro |
Renderiza o script do seletor de idiomas em <UniversallyHead />. Apenas false o desativa. |
scriptsUrl |
UNIVERSALLY_SCRIPTS_URL |
https://scripts.universally.com |
Origem de onde o script do switcher é carregado. |
Uma chave ausente gera um erro: "defina UNIVERSALLY_API_KEY em .env ou passe apiKey nas opções de integração. A chave é a chave do site de 64 caracteres da página de Configuração do seu projeto."
De onde vêm os valores
Cada valor é resolvido nesta ordem, a primeira correspondência vence:
- A opção em
universally({...}) - O ambiente do processo
.env.localna raiz do projeto Astro, ao lado deastro.config.mjs.envna mesma pasta
Um valor vazio conta como ausente. .env.production e outros arquivos de modo não são lidos. A leitura dos arquivos requer Node 20.12 ou mais recente; em Node mais antigo, eles são ignorados sem erro. A chave é resolvida no momento da compilação e compilada no pacote do servidor, nunca no pacote do cliente, portanto, deve estar presente onde a compilação é executada. Veja Deploy de um site Astro com Universally.
hreflang.format
Para uma origem em inglês (EUA) com francês (França) em /fr/ e espanhol (México) em /es/, a página /fr/about é renderizada:
<!-- format: 'variant', the default -->
<link rel="alternate" hreflang="en-us" href="https://example.com/about" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/about" />
<link rel="alternate" hreflang="es-419" href="https://example.com/es/about" />
<link rel="alternate" hreflang="x-default" href="https://example.com/about" />
<!-- format: 'lang' -->
<link rel="alternate" hreflang="en" href="https://example.com/about" />
<link rel="alternate" hreflang="fr" href="https://example.com/fr/about" />
<link rel="alternate" hreflang="es" href="https://example.com/es/about" />
<link rel="alternate" hreflang="x-default" href="https://example.com/about" />
A origem vem primeiro, depois os destinos na ordem em que Universally os retorna, depois x-default. Strings de consulta e hashes são removidos das URLs. Veja tags hreflang.
Uma função recebe uma linha de idioma, com campos como lang, variant, region e url, e retorna o valor. Ela é executada apenas quando a configuração é executada:
universally({
hreflang: {
format: (language) => language.variant.toUpperCase()
}
})
Exemplos
// Check for dashboard edits every five minutes
universally({ revalidateSeconds: 300 })
// Place the switcher script yourself
universally({ switcher: false })
// Serve through language subdomains
universally({ mode: 'proxy' })
Tipos e exportações
import universally, {
REVALIDATE_PATH, // '/_universally/revalidate'
DEFAULT_REVALIDATE_SECONDS, // 60
DEFAULT_SCRIPTS_URL // 'https://scripts.universally.com'
} from '@universally-sdk/astro';
import type {
HreflangOptions,
ResolvedHreflang,
UniversallyMode,
UniversallyOptions,
ResolvedUniversallyOptions
} from '@universally-sdk/astro';
import { UniversallyHead } from '@universally-sdk/astro/components';
Astro.locals é tipado por /// <reference types="@universally-sdk/astro/env" /> em src/env.d.ts:
declare namespace App {
interface Locals {
lang?: string;
t: (source: string) => string;
href: (path: string) => string;
}
}
Endpoint de push
POST /_universally/revalidate
X-Universally-Signature: v1=<hex>
Content-Type: application/json
{ "siteId": "site_123", "cacheEpoch": 12, "langs": ["fr"], "ts": 1750000000 }
| Campo | Significado |
|---|---|
X-Universally-Signature |
HMAC-SHA256 do corpo bruto, com chave da metade privada da chave do site (seus últimos 32 caracteres hexadecimais), como hexadecimal em minúsculas |
langs |
Códigos de variante ou prefixos de URL. null ou [] significa todos os idiomas. |
ts |
Segundos Unix, dentro de 5 minutos do relógio do receptor |
Uma barra final no caminho é aceita.
| Status | Quando |
|---|---|
200 |
{ "ok": true, "reloaded": [...] }, listando apenas idiomas cuja época de cache mudou |
401 |
{ "ok": false }: corpo malformado, assinatura ausente ou incorreta, ts expirado ou uma chave sem metade privada |
404 |
Modo proxy, onde o endpoint não existe |
405 |
Qualquer método diferente de POST |
413 |
Corpo acima de 16 KiB, verificado antes da assinatura |