Utilitários de Pluralização
Este módulo fornece funções para pluralizar palavras em português brasileiro seguindo as regras gramaticais da língua.
Instalação e Importação
typescript
import {
pluralize,
pluralizeWords,
pluralizeWithCount,
} from '@sysvale/foundry';
Funções
pluralize()
Pluraliza uma palavra em português seguindo as regras gramaticais.
Sintaxe
typescript
pluralize(
count: number | string | null = null,
word: string,
customPlural: string = '',
customIrregulars: Record<string, string> = {}
): string
Parâmetros
count
(number | string | null
): Quantidade para determinar se deve pluralizar- Se for
string
, será tratado como a palavra a ser pluralizada - Se for
null
ouundefined
, padrão é 2 - Se for 0 ou 1, retorna a palavra no singular
- Se for negativo, usa o valor absoluto
- Se for
word
(string
): A palavra a ser pluralizadacustomPlural
(string
, opcional): Plural personalizado para a palavracustomIrregulars
(Record<string, string>
, opcional): Dicionário de plurais irregulares customizados
Retorno
string
- A palavra pluralizada ou no singular, conforme a quantidade
Regras de Pluralização
- Singular: Quantidades 0 e 1 retornam a palavra original
- Plural personalizado: Se fornecido via
customPlural
, é usado - Irregulares: Palavras com plurais irregulares predefinidos ou customizados
- Invariáveis: Palavras terminadas em 's' ou 'x' não mudam
- Terminadas em -ão: Convertem para -ões
- Terminadas em -m: Convertem para -ns
- Terminadas em -r ou -z: Adicionam 'es'
- Terminadas em -ol: Convertem para -óis
- Terminadas em -al ou -ul: Convertem para -ais ou -uis
- Terminadas em -el: Convertem para -éis
- Terminadas em -il: Convertem para -is
- Terminadas em vogal: Adicionam 's'
Exemplos
typescript
// Casos básicos
pluralize(1, 'carro'); // → 'carro'
pluralize(2, 'carro'); // → 'carros'
pluralize(0, 'mapa'); // → 'mapa'
// Regras específicas
pluralize(2, 'avião'); // → 'aviões' (-ão → -ões)
pluralize(2, 'homem'); // → 'homens' (-m → -ns)
pluralize(2, 'luz'); // → 'luzes' (-z → +es)
pluralize(2, 'motor'); // → 'motores' (-r → +es)
pluralize(2, 'sol'); // → 'sóis' (-ol → -óis)
pluralize(2, 'animal'); // → 'animais' (-al → -ais)
pluralize(2, 'azul'); // → 'azuis' (-ul → -uis)
pluralize(2, 'papel'); // → 'papéis' (-el → -éis)
pluralize(2, 'fuzil'); // → 'fuzis' (-il → -is)
// Palavras invariáveis
pluralize(3, 'tórax'); // → 'tórax'
pluralize(3, 'lápis'); // → 'lápis'
// Irregulares predefinidos
pluralize(2, 'pão'); // → 'pães'
pluralize(2, 'alemão'); // → 'alemães'
pluralize(2, 'órgão'); // → 'órgãos'
// Plural personalizado
pluralize(2, 'livro', 'livrozinhos'); // → 'livrozinhos'
// Irregulares customizados
pluralize(2, 'cônsul', undefined, { cônsul: 'cônsules' }); // → 'cônsules'
// Contagem como string (word se torna o primeiro parâmetro)
pluralize('carro', ''); // → 'carros'
// Valores negativos
pluralize(-3, 'avião'); // → 'aviões'
// Null/undefined defaulta para 2
pluralize(null, 'livro'); // → 'livros'
Irregulares Predefinidos
typescript
{
pão: 'pães',
mão: 'mãos',
irmão: 'irmãos',
capitão: 'capitães',
cidadão: 'cidadãos',
cão: 'cães',
alemão: 'alemães',
mal: 'males',
órgão: 'órgãos',
nível: 'níveis'
}
pluralizeWithCount()
Retorna a palavra pluralizada precedida pela quantidade.
Sintaxe
typescript
pluralizeWithCount(...args: Parameters<typeof pluralize>): string
Parâmetros
Os mesmos parâmetros da função pluralize()
.
Retorno
string
- A quantidade seguida da palavra pluralizada
Exemplos
typescript
pluralizeWithCount(1, 'carro'); // → '1 carro'
pluralizeWithCount(2, 'carro'); // → '2 carros'
pluralizeWithCount(2, 'livro', 'livrozinhos'); // → '2 livrozinhos'
pluralizeWithCount(3, 'avião'); // → '3 aviões'
pluralizeWords()
Pluraliza múltiplas palavras simultaneamente, útil para frases com substantivos e adjetivos.
Sintaxe
typescript
pluralizeWords(
count: number | string | null,
words: string[],
customPlural: string[] | string = '',
customIrregulars: Record<string, string> = {}
): string
Parâmetros
count
(number | string | null
): Quantidade para determinar se deve pluralizarwords
(string[]
): Array de palavras a serem pluralizadascustomPlural
(string[] | string
, opcional):- Se for array: plurais personalizados para cada palavra correspondente
- Se for string: plural personalizado aplicado a todas as palavras
customIrregulars
(Record<string, string>
, opcional): Dicionário de plurais irregulares
Retorno
string
- As palavras pluralizadas unidas por espaços
Exemplos
typescript
// Uma palavra
pluralizeWords(0, ['papel']); // → 'papel'
pluralizeWords(1, ['papel']); // → 'papel'
pluralizeWords(2, ['papel']); // → 'papéis'
// Duas palavras (substantivo + adjetivo)
pluralizeWords(1, ['avião', 'antigo']); // → 'avião antigo'
pluralizeWords(2, ['avião', 'antigo']); // → 'aviões antigos'
// Três palavras
pluralizeWords(1, ['moto', 'branca', 'escolhida']); // → 'moto branca escolhida'
pluralizeWords(2, ['moto', 'branca', 'escolhida']); // → 'motos brancas escolhidas'
// Com plurais personalizados
pluralizeWords(2, ['o', 'avião', 'velho'], ['os', 'aviõezinhos', 'velhos']); // → 'os aviõezinhos velhos'
Casos de Uso Comuns
Mensagens Dinâmicas
typescript
const count = getItemCount();
const message = `Você tem ${pluralizeWithCount(count, 'mensagem')} não lida`;
// count = 1: "Você tem 1 mensagem não lida"
// count = 5: "Você tem 5 mensagens não lidas"
Descrições de Produtos
typescript
const quantity = 3;
const description = pluralizeWords(quantity, ['produto', 'selecionado']);
// → "produtos selecionados"
Textos com Plurais Complexos
typescript
const items = 2;
const text = pluralizeWords(
items,
['animal', 'doméstico'],
['bichinhos', 'domésticos']
);
// → "bichinhos domésticos"
Limitações
- As regras implementadas cobrem a maioria dos casos do português brasileiro, mas podem não contemplar todas as exceções da língua
- Palavras compostas podem precisar de tratamento especial via
customIrregulars
- A função assume que todas as palavras em
pluralizeWords()
devem seguir a mesma regra de pluralização (singular para count ≤ 1, plural para count > 1)