Internacionalização (i18n) em Swift: guia completo para iOS e macOS
\n\nInternacionalização (i18n) é o processo de projetar um aplicativo de forma que ele possa ser adaptado para diferentes idiomas e regiões sem alterações de engenharia. No ecossistema Apple (iOS, macOS, watchOS, tvOS), as ferramentas de localização estão integradas diretamente no Swift e no Xcode. Neste artigo, vamos detalhar como usar NSLocalizedString e o moderno String Catalog para criar aplicativos multilíngues.
\n\nFundamentos: NSLocalizedString
\n\nO mecanismo básico de internacionalização em Swift é a função NSLocalizedString. Ela busca a tradução da string nos arquivos .strings ou .xcstrings (String Catalog).
let greeting = NSLocalizedString("hello_world", comment: "Saudação na tela inicial")\nprint(greeting) // Exibirá a tradução de acordo com o idioma do dispositivo\n\nO parâmetro comment serve como dica para o tradutor. A chave "hello_world" deve ser única em todo o projeto.
Criação de arquivos de localização
\n\nNo Xcode, você pode adicionar idiomas suportados através de Project Info > Localizations. Depois disso, para cada arquivo .strings ou Storyboard, serão criados subarquivos de localização.
Exemplo de conteúdo do Localizable.strings (inglês):
"hello_world" = "Hello, World!";\n"welcome_message" = "Welcome to our app %@";\n\nVersão em português (Localizable.strings (Portuguese)):
"hello_world" = "Olá, Mundo!";\n"welcome_message" = "Bem-vindo ao nosso aplicativo %@";\n\nFormatação de strings com parâmetros
\n\nPara strings que contêm dados dinâmicos, use especificadores de formato. Em Swift, isso pode ser feito de duas maneiras:
\n\nMétodo 1: String(format:)
\nlet userName = "João"\nlet points = 150\nlet message = String(format: NSLocalizedString("user_score", comment: "Pontuação do usuário"), userName, points)\nprint(message) // "João marcou 150 pontos"\n\nNo arquivo de localização:
\n"user_score" = "%@ marcou %d pontos";\n\nMétodo 2: Swift String Interpolation (iOS 15+)
\nlet message = "\\(userName) marcou \\(points) pontos"\nNo entanto, este método não é adequado para localização, pois a ordem das palavras pode variar em diferentes idiomas. Use apenas String(format:) ou AttributedString com inflexão.
Pluralização (formas plurais)
\n\nEm português, existem regras complexas de plural: "1 arquivo", "2 arquivos", "5 arquivos". Para isso, a Apple fornece stringsdict (XML) ou String Catalog com regras de pluralização.
\n\nExemplo de stringsdict
\n<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"\n "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n<dict>\n <key>files_count</key>\n <dict>\n <key>NSStringLocalizedFormatKey</key>\n <string>%#@files@</string>\n <key>files</key>\n <dict>\n <key>NSStringFormatSpecTypeKey</key>\n <string>NSStringPluralRuleType</string>\n <key>NSStringFormatValueTypeKey</key>\n <string>d</string>\n <key>one</key>\n <string>%d arquivo</string>\n <key>few</key>\n <string>%d arquivos</string>\n <key>many</key>\n <string>%d arquivos</string>\n <key>other</key>\n <string>%d arquivos</string>\n </dict> Também na biblioteca
OpenTelemetry Go: Guia completo com exemplos práticos
Gerador de QR Codes em JavaScript (Node.js) com qrcode e qr-image
Geração de relatórios PDF em Swift para iOS e macOS com PDFKit e Core Graphics
Validação de dados em Kotlin: bibliotecas e abordagens (Kotlin, Java)