É possível compor tipos de nós? (ex.: múltiplos plurais em uma mesma frase)
Sim, os tipos de nós no Intlayer podem ser compostos. Por exemplo, você pode aninhar um plural() dentro de outro plural(), ou compor plural() com insert().
Quando você precisa expressar duas variáveis de plural independentes em uma única frase (por exemplo: "1 arquivo em 2 pastas" vs. "3 arquivos em 1 pasta"), existem duas abordagens principais:
- Usar
insert()com chavesplural()separadas (Recomendado): Limpo, sustentável e preserva a ordem correta das palavras entre diferentes idiomas. - Aninhar
plural()dentro deplural()(Composição direta): Sintaxe válida, mas pode levar a uma explosão combinatória de ramificações para idiomas com regras de plural complexas.
Compondo insert() com plural()
O padrão mais flexível e idiomático é declarar chaves plural individuais para cada termo no plural e combiná-las com um template insert().
1. Declarar o conteúdo
src/fileSummary.content.ts
Copiar código
Copiar o código para a área de transferência
import { insert, plural, t, type Dictionary } from "intlayer";
const fileSummaryContent = {
key: "file_summary",
content: {
// O template de inserção define como os elementos são organizados por idioma
summary: t({
pt: insert("{{files}} em {{folders}}"),
en: insert("{{files}} in {{folders}}"),
fr: insert("{{files}} dans {{folders}}"),
ja: insert("{{folders}}の中に{{files}}"), // Ordem personalizada para o japonês
}),
files: t({
pt: plural({
one: "{{count}} arquivo",
other: "{{count}} arquivos",
}),
en: plural({
one: "{{count}} file",
other: "{{count}} files",
}),
fr: plural({
one: "{{count}} fichier",
other: "{{count}} fichiers",
}),
ja: plural({
other: "{{count}} 個のファイル",
}),
}),
folders: t({
pt: plural({
one: "{{count}} pasta",
other: "{{count}} pastas",
}),
en: plural({
one: "{{count}} folder",
other: "{{count}} folders",
}),
fr: plural({
one: "{{count}} dossier",
other: "{{count}} dossiers",
}),
ja: plural({
other: "{{count}} 個のフォルダー",
}),
}),
},
} satisfies Dictionary;
export default fileSummaryContent;
2. Consumir em seu componente
src/components/FileSummary.tsx
Copiar código
Copiar o código para a área de transferência
src/components/FileSummary.vue
Copiar código
Copiar o código para a área de transferência
src/components/FileSummary.svelte
Copiar código
Copiar o código para a área de transferência
Por que esta é a abordagem recomendada
- Estrutura da frase e ordem das palavras: Idiomas diferentes posicionam adjetivos, contadores e objetos em ordens distintas (por exemplo, japonês ou alemão podem inverter a ordem de arquivos e pastas). O template
insert()garante controle total da ordem das palavras sem alterar as regras de plural. - Previne a explosão combinatória: Se o idioma A possui 2 formas de plural (inglês:
one,other) e o idioma B possui 4 formas (russo:one,few,many,other), aninhar plurais exige $4 \times 4 = 16$ ramificações no russo. Com chaves separadas, declaram-se apenas $4 + 4 = 8$ ramificações. - Reutilização: Você pode reutilizar as definições de plural de
filesoufoldersem outras partes da interface.