Internacionalização (i18n) em Swift: Guia completo para iOS e macOS
Internacionalização (abreviada como i18n) é o processo de projetar um aplicativo para que ele possa ser adaptado a diferentes idiomas e regiões sem alterar o código-fonte. Para desenvolvedores das plataformas Apple (iOS, macOS, watchOS, tvOS), o Swift oferece um conjunto de ferramentas poderoso, porém elegante. Neste artigo, vamos detalhar como configurar a i18n no seu projeto Swift, utilizando os mecanismos nativos da Apple.
Por que a i18n é crucial?
Mesmo que seu aplicativo seja inicialmente criado em um único idioma, a internacionalização deve ser considerada na fase de arquitetura. Isso permite:
- Ampliar o público: Usuários de diferentes países preferem aplicativos em seu idioma nativo.
- Simplificar a localização: Uma i18n adequada transforma a adição de um novo idioma em uma operação simples com arquivos.
- Evitar hardcode: Todas as strings são movidas para recursos separados, melhorando a legibilidade e a manutenção do código.
Ferramenta principal: NSLocalizedString
O coração da internacionalização em Swift é a macro NSLocalizedString. Ela busca a string nos arquivos de localização (.strings) e retorna a versão traduzida. Se a tradução não for encontrada, a chave (geralmente a string em inglês) é usada.
// Exemplo de uso em Swiftlet welcomeMessage = NSLocalizedString("welcome_message", comment: "Saudação na tela inicial")label.text = welcomeMessageRecomenda-se sempre incluir o comment — ele ajuda os tradutores a entender o contexto.
Estrutura dos arquivos de localização
No Xcode, os idiomas são adicionados através de Project Settings > Info > Localizations. Em seguida, são criadas as pastas xx.lproj (por exemplo, en.lproj, pt-BR.lproj). Dentro delas, são armazenados:
- Localizable.strings — o arquivo principal com pares "chave" = "valor";
- InfoPlist.strings — para localizar o nome do aplicativo e strings do sistema;
- Storyboard.strings — arquivo gerado automaticamente para interfaces criadas em storyboards.
Formato do Localizable.strings
O arquivo tem uma sintaxe simples:
// Inglês (en.lproj/Localizable.strings)"welcome_message" = "Welcome to our app!";"login_button" = "Log In";
// Português (pt-BR.lproj/Localizable.strings)"welcome_message" = "Bem-vindo ao nosso aplicativo!";"login_button" = "Entrar";Importante: As strings terminam com ponto e vírgula. A codificação do arquivo deve ser UTF-8 ou UTF-16.
Formatação de strings com parâmetros
Frequentemente é necessário inserir dados dinâmicos em uma string (nome do usuário, quantidade de itens). Para isso, usa-se String(format:):
// No Localizable.strings:"items_count" = "Você tem %d itens.";"user_greeting" = "Olá, %@!";
// No código Swift:let count = 5let itemsText = String(format: NSLocalizedString("items_count", comment: "Quantidade de itens"), count)
let userName = "Alexandre"let greeting = String(format: NSLocalizedString("user_greeting", comment: "Saudação ao usuário"), userName)Para suportar formas plurais (1 maçã, 2 maçãs, 5 maçãs), use StringDict (arquivos .stringsdict).
Trabalhando com XLIFF para tradutores
A Apple suporta o formato XLIFF (XML Localisation Interchange File). Este é um padrão da indústria para troca de traduções. No Xcode, você pode exportar todas as strings para um arquivo XLIFF, entregá-lo ao tradutor e, em seguida, importá-lo de volta.
// Comando no terminal para exportar:xcodebuild -exportLocalizations -localizationPath ./translations -project YourProject.xcodeproj
// Importar traduções prontas: Também na biblioteca
Parsing de HTML em C++: visão geral das bibliotecas e exemplos de código
Biblioteca Padrão Rust: visão geral completa
Validação de dados em TypeScript: bibliotecas, abordagens e exemplos de código
Cache em Kotlin: Redis, Caffeine e outras soluções
Processamento de imagens em C++: bibliotecas CImg, OpenCV e Magick++