Pluralização e Stringsdict
Lide com regras de pluralização entre idiomas.
Pluralização e Stringsdict é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.
O problema dos plurais
O inglês tem duas formas — 1 item, 2 itens — por isso os desenvolvedores frequentemente escrevem "\(n) item" + (n == 1 ? "" : "s"). Isso falha completamente: o árabe tem seis categorias de plural, o russo tem três e o japonês tem uma. Inserir a lógica de plural diretamente no código é um erro de localização prestes a acontecer.
// FRAGILE — only works for English
let n = 5
let bad = "\(n) item" + (n == 1 ? "" : "s")
print(bad)Categorias de plural
O Unicode define as categorias de plural: zero, um, dois, poucos, muitos, outro. Cada idioma usa um subconjunto delas. O sistema escolhe a categoria correta para um número com base nas regras da localidade — você nunca precisa escrever essas regras.
// English uses: one, other
// Russian uses: one, few, many, other
// Japanese uses: other (only)
// You provide a variant string per category needed.Variantes de plural em um String Catalog
Em um String Catalog, você marca uma string como contendo variações de plural. O Xcode então permite fornecer um texto para cada categoria. Em tempo de execução, a variante correta é escolhida automaticamente com base na contagem interpolada e na localidade do usuário.
// Catalog entry, key "message_count":
// one: "You have %lld message"
// other: "You have %lld messages"
let count = 1
let text = String(localized: "You have \(count) messages")
print(text)O .stringsdict legado
Antes dos String Catalogs, os plurais ficavam em um arquivo .stringsdict — uma lista de propriedades que mapeia uma key para uma string de formato e suas variantes por categoria. Você ainda encontrará esses arquivos em projetos mais antigos, e eles continuam sendo totalmente compatíveis.
// Localizable.stringsdict (plist) structure:
// key: "items_count"
// NSStringLocalizedFormatKey: "%#@items@"
// items: NSStringPluralRuleType
// one: "%lld item"
// other: "%lld items"Anatomia de uma entrada stringsdict
Cada entrada tem uma key de formato que referencia uma ou mais variáveis nomeadas envolvidas em %#@name@. Cada variável declara seu tipo de regra (NSStringPluralRuleType), o especificador do tipo de valor (%lld) e uma string para cada categoria de plural.
// The %#@items@ token expands to the chosen
// plural variant. %lld is the integer placeholder
// substituted inside each variant string.
let n = 3
print(String(localized: "\(n) items selected"))Consultando um texto no plural
No código, o local da chamada é idêntico ao de qualquer texto localizado — basta interpolar a quantidade. A seleção do plural acontece dentro da estrutura, portanto a mesma linha de Swift funciona em todos os idiomas.
func messagesLabel(_ count: Int) -> String {
return String(localized: "You have \(count) messages")
}
print(messagesLabel(0))
print(messagesLabel(1))
print(messagesLabel(7))Por que “um” não é apenas 1
Um erro comum é presumir que a categoria um significa exatamente o número 1. Em alguns idiomas, ela abrange qualquer número terminado em 1, como 21 e 31, e zero pode ou não ser uma categoria distinta. Sempre forneça um texto para cada categoria e deixe as regras decidirem.
// Russian: 1, 21, 31 -> 'one'
// 2, 3, 4 -> 'few'
// 5..20, 0 -> 'many'
// Never assume one == 1.Combinando plurais com outros valores
Um formato pode ter várias variáveis — por exemplo, uma quantidade e um nome. Cada uma pode ser pluralizada de forma independente. Em um catálogo de textos, você indica qual interpolação varia; o restante permanece constante entre as variantes.
let files = 2
let folder = "Photos"
let text = String(
localized: "\(files) files in \(folder)")
// 'files' drives the plural; 'folder' is substituted as-is
print(text)Variantes de largura e dispositivo
O mesmo mecanismo de catálogo aceita variações de dispositivo e largura, permitindo mostrar um rótulo curto em um relógio e um mais longo no iPad, ou abreviar quando o espaço é limitado. Elas funcionam junto com as variantes de plural.
// Catalog can vary by:
// plural: one / other
// device: iPhone / iPad / watch
// width: short / medium / long
let label = String(localized: "Notifications")
print(label)Testando a pluralização
Para verificar suas variantes, execute o aplicativo em cada idioma de destino usando a substituição de localização do esquema do Xcode ou use o pseudoidioma e as visualizações por localidade. Verifique especialmente os números-limite: 0, 1, 2, 5, 11, 21, 100.
let samples = [0, 1, 2, 5, 11, 21, 100]
for n in samples {
print(String(localized: "\(n) items"))
}Práticas recomendadas
Para obter plurais corretos:
- Nunca concatene nem codifique sufixos
sdiretamente. - Forneça todas as categorias necessárias nos idiomas de destino.
- Determine o plural a partir do inteiro interpolado, não de um texto pré-calculado.
- Dê preferência aos catálogos de textos para códigos novos; mantenha
.stringsdictapenas para destinos legados.
func cartSummary(_ items: Int) -> String {
String(localized: "Your cart has \(items) items",
comment: "Cart count; pluralized")
}
print(cartSummary(1))Verificação rápida
Relembre como a seleção do plural deve ser tratada.
Recapitulação
Você aprendeu a pluralização correta para cada localidade:
- As categorias de plural do Unicode são zero, um, dois, poucos, muitos, outro; cada idioma usa um subconjunto.
- Os catálogos de textos permitem adicionar variantes de plural por chave; o
.stringsdictlegado faz o mesmo por meio de um plist. - Os locais das chamadas permanecem simples — você interpola a quantidade e a estrutura escolhe a variante.
- Nunca codifique a lógica do plural; a categoria um não representa apenas o número 1.
Perguntas Frequentes
A aula “Pluralização e Stringsdict” é grátis?
Sim — o texto completo de “Pluralização e Stringsdict” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.
O que vou aprender em “Pluralização e Stringsdict”?
Lide com regras de pluralização entre idiomas. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Swift Academy?
Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Pluralização e Stringsdict”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Swift Academy?
Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Catálogos de Strings e Strings Localizadas
- Pluralização e Stringsdict
- Formatação Sensível à Localidade
- Direita para Esquerda e Direção do Layout