Faça sua pergunta e obtenha um resumo do documento referenciando esta página e o provedor AI de sua escolha
Histórico de versões
- "Lançamento do recurso de variantes"v9.0.012/06/2026
- "`variant` agora aceita uma string ou um objeto — os antigos `meta` / registros dinâmicos são declarados como variantes de objeto"v9.1.026/06/2026
- "Uma variante declara apenas as chaves que sobrescreve; as variantes não declaradas retornam para a entrada padrão"v9.1.131/07/2026
- "Os provedores aceitam uma prop `variant` ambiente; os seletores aceitam uma cadeia de preferência ordenada"v9.1.204/08/2026
O conteúdo desta página foi traduzido com uma IA.
Veja a última versão do conteúdo original em inglêsIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Variantes
Uma variante é um conjunto de arquivos de conteúdo que compartilham a mesma chave de dicionário (key), mas cada um carrega um valor variant diferente. O Intlayer serve o arquivo apropriado com base no seletor passado para useIntlayer.
O valor de variant pode assumir duas formas:
- Uma string — uma única alternativa nomeada (testes A/B, banners sazonais, feature flags).
- Um objeto — um discriminador estruturado endereçado por um conjunto de campos (registros de CMS, conteúdo específico do usuário, qualquer conteúdo cuja chave é um ID opaco). O objeto inteiro é a identidade: o seletor deve fornecer um objeto igual para resolver a entrada.
A forma de objeto substitui o antigo campometa. Onde você antes escreviameta: { id, … }, escrevavariant: { id, … }e selecione-a com{ variant: { id, … } }.
Variantes nomeadas (string)
Cada arquivo representa uma alternativa nomeada. Omitir variant (ou defini-lo como "default") o marca como fallback.
Copiar o código para a área de transferência
import { t, type Dictionary } from "intlayer";
const dictionary = {
key: "hero-banner",
variant: "default",
content: {
headline: t({
en: "Build faster with Intlayer",
fr: "Développez plus vite avec Intlayer",
}),
cta: t({ en: "Get started", fr: "Commencer" }),
},
} satisfies Dictionary;
export default dictionary;Copiar o código para a área de transferência
import { t, type Dictionary } from "intlayer";
const dictionary = {
key: "hero-banner",
variant: "black_friday",
content: {
headline: t({
en: "50 % off — today only",
fr: "−50 % — aujourd'hui seulement",
}),
cta: t({ en: "Shop now", fr: "Acheter maintenant" }),
},
} satisfies Dictionary;
export default dictionary;Variantes parciais
Uma variante declara apenas as chaves que sobrescreve; o restante é herdado da entrada padrão.
Copiar o código para a área de transferência
import { t, type Dictionary } from "intlayer";
const dictionary = {
key: "hero-banner",
variant: "summer",
content: {
headline: t({
en: "Build faster all summer",
fr: "Développez plus vite tout l'été",
}),
},
} satisfies Dictionary;
export default dictionary;Copiar o código para a área de transferência
useIntlayer("hero-banner", { variant: "summer" });// → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` herdadouseIntlayer("hero-banner", { variant: "never-declared" });// → a entrada padrãoPortanto, adicione um arquivo de variante apenas onde o texto realmente difere. Uma chave é resolvida como null apenas quando declara variantes, mas nenhuma entrada padrão.
Consumir variantes nomeadas
Variante padrão
Copiar o código para a área de transferência
import { useIntlayer } from "react-intlayer";
export const Hero = () => {
const { headline, cta } = useIntlayer("hero-banner");
// → variante padrão
return (
<section>
<h1>{headline}</h1>
<a>{cta}</a>
</section>
);
};Variante nomeada
Copiar o código para a área de transferência
const { headline, cta } = useIntlayer("hero-banner", { variant: "black_friday",});Variante nomeada com locale explícito
Copiar o código para a área de transferência
const content = useIntlayer("hero-banner", { variant: "black_friday", locale: "fr",});Variantes de objeto (estruturadas)
Uma variante de objeto endereça o conteúdo por um conjunto arbitrário de pares chave-valor declarados no campo variant — possibilitando modelar registros de CMS, conteúdo específico do usuário ou qualquer conteúdo cuja chave seja um ID opaco. O objeto inteiro é a identidade: o seletor deve fornecer um objeto igual para que a entrada seja resolvida.
Copiar o código para a área de transferência
import { t, type Dictionary } from "intlayer";
const dictionary = {
key: "product",
variant: { id: "prod_abc", userId: "user_123" },
content: {
name: t({ en: "Widget Pro", fr: "Widget Pro" }),
description: t({ en: "The best widget.", fr: "Le meilleur widget." }),
},
} satisfies Dictionary;
export default dictionary;Copiar o código para a área de transferência
import { t, type Dictionary } from "intlayer";
const dictionary = {
key: "product",
variant: { id: "prod_abcd", userId: "user_123" },
content: {
name: t({ en: "Widget Lite", fr: "Widget Lite" }),
description: t({ en: "A lighter option.", fr: "Une option plus légère." }),
},
} satisfies Dictionary;
export default dictionary;Consumir variantes de objeto
Passe o objeto correspondente para variant. Cada campo declarado no dicionário deve ser fornecido e igual; caso contrário, o resultado é null. A ordem dos campos não importa.
Copiar o código para a área de transferência
import { useIntlayer } from "react-intlayer";
export const Product = ({
productId,
userId,
}: {
productId: string;
userId: string;
}) => {
const content = useIntlayer("product", {
variant: { id: productId, userId },
});
if (!content) return null;
return <p>{content.description}</p>;
};Com locale explícito
Copiar o código para a área de transferência
const content = useIntlayer("product", { variant: { id: "prod_abc", userId: "user_123" }, locale: "fr",});Campo ausente — sem correspondência
Copiar o código para a área de transferência
// Retorna null: `userId` está ausente, então o objeto não corresponde à variante declaradaconst content = useIntlayer("product", { variant: { id: "prod_abc" } });Variante ambiente
Algumas dimensões de variante são fixas durante toda uma sessão: o inquilino, o tipo de instituição, o nível do plano. São resolvidas uma única vez, e nenhum componente deveria ter de as passar à mão.
Não envolvauseIntlayernum hook próprio para as injetar. A otimização em tempo de compilação apenas reescreve uma chamada literaluseIntlayer("key")importada do pacote do framework, pelo que nada atrás de um wrapper entra no bundle.
Declare antes a variante uma única vez no provedor, exatamente como locale:
Copiar o código para a área de transferência
import { IntlayerProvider } from "react-intlayer";
export const App = ({ locale, schoolType }) => (
<IntlayerProvider locale={locale} variant={schoolType}>
<Hero />
</IntlayerProvider>
);Cada leitura de dicionário abaixo do provedor passa a resolver-se com essa variante, e um seletor no local da chamada ganha sempre:
Copiar o código para a área de transferência
useIntlayer("hero-banner");// → a variante do provedoruseIntlayer("hero-banner", { variant: "summer" });// → "summer" — substitui a variante do provedor, não a estendeFormas
A prop variant aceita três formas:
Abrir a tabela em um modal para ver todo o conteúdo claramente
| Forma | Significado |
|---|---|
variant="school1" | uma variante nomeada para todas as chaves |
variant={["school1", "default"]} | uma cadeia de preferência ordenada |
variant={{ "hero-banner": "school1", default: "base" }} | uma variante por chave de dicionário |
Cadeia de preferência
Uma cadeia é percorrida da esquerda para a direita entre as entradas declaradas por cada chave, e a primeira declarada ganha. Quando nenhuma está declarada, usa-se a entrada padrão implícita — exatamente como para um valor único.
Copiar o código para a área de transferência
<IntlayerProvider variant={["school1", "school2"]} />// `hero-banner` não declara uma entrada `school1`, mas declara `school2` → "school2"// uma chave que não declara nenhuma das duas → a entrada padrãoAssim, ["black_friday", "summer"] lê-se como «black friday se esta chave tiver uma, senão summer, senão padrão». As cadeias também são aceites no local da chamada:
Copiar o código para a área de transferência
useIntlayer("hero-banner", { variant: ["black_friday", "summer"] });Note que esta é a imagem invertida do array aceite pelo campo variant de um ficheiro de conteúdo: aí um array declara uma entrada por elemento; aqui consome-as por ordem de prioridade.
Mapa por chave
Enderece cada chave de dicionário separadamente. A entrada reservada default cobre todas as chaves não listadas:
Copiar o código para a área de transferência
<IntlayerProvider variant={{ "hero-banner": "school1", product: ["school1", "default"], default: "base", }}/>Num provedor, um objeto simples é sempre lido como o mapa por chave, nunca como uma variante de objeto — as duas são estruturalmente idênticas. Para fixar uma variante de objeto globalmente, aninhe-a sob uma entrada: variant={{ default: { id: "prod_abc" } }}.
Como as chaves do mapa são verificadas contra as suas chaves de dicionário declaradas, um erro de escrita — ou uma variante de objeto escrita diretamente, como variant={{ id: "prod_abc" }} — é um erro de compilação.
Modo de carregamento
As variantes de objeto costumam ser carregadas de forma preguiçosa. Defina importMode no dicionário para controlar isso:
Copiar o código para a área de transferência
const dictionary = {
key: "product",
importMode: "fetch", // or "dynamic"
variant: { id: "prod_abc", userId: "user_123" },
content: { … },
} satisfies Dictionary;
export default dictionary;Veja otimização do bundle para detalhes sobre os modos static, dynamic e fetch.
Casos de uso típicos
- Testes A/B de texto orientados por uma chave de experimento
- Banners sazonais ou promocionais
- Mensagens com feature flag
- Campanhas de marketing específicas por locale
- Texto de marketing por produto gerenciado em um CMS
- Conteúdo específico do usuário ou da conta
- Qualquer conteúdo indexado por um ID opaco em tempo de execução