Internacionalización (i18n) en Swift: guía completa para iOS y macOS
\n\nLa internacionalización (i18n) es el proceso de diseñar una aplicación para que pueda adaptarse a diferentes idiomas y regiones sin cambios de ingeniería. En el ecosistema de Apple (iOS, macOS, watchOS, tvOS), las herramientas de localización están integradas directamente en Swift y Xcode. En este artículo, analizaremos en detalle cómo usar NSLocalizedString y el moderno String Catalog para crear aplicaciones multilingües.
\n\nFundamentos: NSLocalizedString
\n\nEl mecanismo básico de internacionalización en Swift es la función NSLocalizedString. Esta busca la traducción de una cadena en archivos .strings o .xcstrings (String Catalog).
let greeting = NSLocalizedString("hello_world", comment: "Saludo en la pantalla principal")\nprint(greeting) // Muestra la traducción según el idioma del dispositivo\n\nEl parámetro comment sirve como ayuda para el traductor. La clave "hello_world" debe ser única en todo el proyecto.
Creación de archivos de localización
\n\nEn Xcode, puedes agregar idiomas compatibles a través de Project Info > Localizations. Después de esto, se crearán subarchivos de localización para cada archivo .strings o Storyboard.
Ejemplo del contenido de Localizable.strings (inglés):
"hello_world" = "Hello, World!";\n"welcome_message" = "Welcome to our app %@";\n\nVersión en español (Localizable.strings (Spanish)):
"hello_world" = "¡Hola, mundo!";\n"welcome_message" = "Bienvenido a nuestra aplicación %@";\n\nFormato de cadenas con parámetros
\n\nPara cadenas que contienen datos dinámicos, usa especificadores de formato. En Swift, esto se puede hacer de dos maneras:
\n\nMétodo 1: String(format:)
\nlet userName = "Juan"\nlet points = 150\nlet message = String(format: NSLocalizedString("user_score", comment: "Puntos del usuario"), userName, points)\nprint(message) // "Juan obtuvo 150 puntos"\n\nEn el archivo de localización:
\n"user_score" = "%@ obtuvo %d puntos";\n\nMétodo 2: Swift String Interpolation (iOS 15+)
\nlet message = "\\(userName) obtuvo \\(points) puntos"\nSin embargo, este método no es adecuado para localización, ya que el orden de las palabras puede variar en diferentes idiomas. Usa solo String(format:) o AttributedString con inflexión.
Pluralización (formas plurales)
\n\nEn español hay reglas complejas de declinación: "1 archivo", "2 archivos", "5 archivos". Para esto, Apple proporciona stringsdict (XML) o String Catalog con reglas de pluralización.
\n\nEjemplo 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 archivo</string>\n <key>other</key>\n <string>%d archivos</string>\n </dict> También en la biblioteca
Wire para Go: guía completa con ejemplos
Cliente Elasticsearch para Java: guía completa de conexión y trabajo
Procesamiento de imágenes en Node.js: bibliotecas y herramientas
Trabajo con S3 y almacenamiento en la nube en Java: AWS SDK y MinIO