0Pricing
Swift Academy · Aula

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 s diretamente.
  • 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 .stringsdict apenas 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 .stringsdict legado 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

  1. Catálogos de Strings e Strings Localizadas
  2. Pluralização e Stringsdict
  3. Formatação Sensível à Localidade
  4. Direita para Esquerda e Direção do Layout
← Voltar para Swift Academy