Internacionalização de aplicativos Swift: tornando seu código compreensível para o mundo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que seu aplicativo precisa de internacionalização?

Imagine: você criou um aplicativo iOS incrível. Ele funciona perfeitamente, a interface é um espetáculo, e usuários do Brasil dão cinco estrelas. Mas e se seu código falar inglês? Ou chinês? Ou árabe, onde o texto é lido da direita para a esquerda?

Internacionalização em Swift não é apenas traduzir botões. É uma abordagem arquitetônica que permite que seu aplicativo fale a língua do usuário, respeite suas diferenças culturais (formatos de data, moedas, unidades de medida) e não quebre ao mudar de localidade.

Neste artigo, vamos abordar como implementar corretamente i18n (internationalization) em um projeto Swift, usando ferramentas modernas do Xcode e melhores práticas. Pronto para tornar seu código um cidadão do mundo? Vamos lá!

Fundamentos da localização em Swift: de NSLocalizedString a String Catalog

Abordagem clássica: NSLocalizedString

A ferramenta mais básica é a macro NSLocalizedString. Ela busca a tradução em arquivos .strings e, se não encontrar, exibe a chave (ou o valor padrão).

let hello = NSLocalizedString("hello_world", comment: "Saudação na tela principal")
print(hello) // Exibe a tradução de acordo com o idioma do dispositivo

O comentário não é mera formalidade. Ele ajuda os tradutores a entender o contexto: "hello_world" pode ser tanto uma saudação quanto o nome de uma seção. Sempre escreva um comment significativo.

String Catalog — o novo padrão (Xcode 15+)

Esqueça dezenas de arquivos Localizable.strings. No Xcode 15, surgiram os String Catalogs (.xcstrings). É um único arquivo com suporte a múltiplos idiomas, pluralização e notas contextuais.

Para criar um catálogo: File → New → File → String Catalog. Adicione uma chave — e pronto:

// O código permanece o mesmo!
let welcome = NSLocalizedString("welcome_message", comment: "Saudação para novo usuário")

// No String Catalog, você simplesmente adiciona as traduções para en, pt-BR, ar, etc.

Vantagens: não precisa sincronizar arquivos, menos chances de erro com codificação, suporte embutido para pluralização.

Formatação de números e datas: código cultural

Erro: definir o formato da data como "dd/MM/yyyy". Nos EUA, escrevem "MM/dd/yyyy", no Japão — "yyyy年MM月dd日". Swift resolve com DateFormatter e NumberFormatter.

Datas que não envergonham

let date = Date()
let formatter = DateFormatter()
formatter.dateStyle = .long
formatter.timeStyle = .none
formatter.locale = Locale.current // Ajusta automaticamente ao idioma do dispositivo

let localizedDate = formatter.string(from: date)
// Para en: "January 15, 2025"
// Para pt-BR: "15 de janeiro de 2025"
// Para de: "15. Januar 2025"
print(localizedDate)

Nada de strings dateFormat! Use .short, .medium, .long — eles já consideram as regras culturais.

Números e moedas: respeite vírgulas e pontos

No Brasil, o número 1234.56 é escrito como "1.234,56", e nos EUA — "1,234.56". O NumberFormatter sabe disso:

let price = 1234.56
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .currency
numberFormatter.locale = Locale.current

let localizedPrice = numberFormatter.string(from: NSNumber(value: price))!
// Para en_US: "$1,234.56"
// Para pt_BR: "R$ 1.234,56"
// Para de_DE: "1.234,56 €"
print(localizedPrice)

Pluralização: um, dois, muitos — não adivinhe

A regra "um — muitos" funciona apenas em inglês. Em português, há "1 minuto", "2 minutos", "5 minutos". Em árabe, seis formas! O String Catalog e NSStringPluralRule resolvem isso elegantemente.

No String Catalog, você adiciona uma chave, define o tipo como "Plural" e preenche as formas:

// No código

Blogs

Book Recommendations