Internacionalización de aplicaciones Swift: haciendo que tu código sea comprensible para el mundo

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Por qué tu aplicación necesita internacionalización?

Imagina: has creado una aplicación iOS increíble. Funciona perfectamente, la interfaz es una maravilla y los usuarios de Rusia le dan cinco estrellas. Pero, ¿y si tu código hablara inglés? ¿O chino? ¿O árabe, donde el texto se lee de derecha a izquierda?

La internacionalización en Swift no es solo traducir botones. Es un enfoque arquitectónico que permite que tu aplicación hable el idioma del usuario, respete sus particularidades culturales (formatos de fecha, moneda, unidades de medida) y no se rompa al cambiar de configuración regional.

En este artículo, analizaremos cómo implementar correctamente i18n (internationalization) en un proyecto Swift, utilizando las herramientas modernas de Xcode y las mejores prácticas. ¿Listo para hacer que tu código sea ciudadano del mundo? ¡Allá vamos!

Fundamentos de la localización en Swift: de NSLocalizedString a String Catalog

Enfoque clásico: NSLocalizedString

La herramienta más básica es la macro NSLocalizedString. Busca la traducción en archivos .strings y, si no la encuentra, muestra la clave (o el valor predeterminado).

let hello = NSLocalizedString("hello_world", comment: "Saludo en la pantalla principal")
print(hello) // Muestra la traducción según el idioma del dispositivo

El comentario no es solo una formalidad. Ayuda a los traductores a entender el contexto: "hello_world" puede ser tanto un saludo como el nombre de una sección. Siempre escribe un comment con sentido.

String Catalog — el nuevo estándar (Xcode 15+)

Olvídate de los decenas de archivos Localizable.strings. En Xcode 15 aparecieron los String Catalogs (.xcstrings). Es un archivo único con soporte para múltiples idiomas, pluralización y notas contextuales.

Para crear un catálogo: File → New → File → String Catalog. Añades una clave y listo:

// ¡El código sigue siendo el mismo!
let welcome = NSLocalizedString("welcome_message", comment: "Saludo para un nuevo usuario")

// En String Catalog simplemente añades las traducciones para en, ru, ar, etc.

Ventajas: no es necesario sincronizar archivos, menos posibilidades de error con la codificación, soporte integrado para pluralización.

Formateo de números y fechas: código cultural

Error: establecer rígidamente el formato de fecha como "dd.MM.yyyy". En EE. UU. escriben "MM/dd/yyyy", en Japón — "yyyy年MM月dd日". Swift nos salva con DateFormatter y NumberFormatter.

Fechas que no dan vergüenza mostrar

let date = Date()
let formatter = DateFormatter()
formatter.dateStyle = .long
formatter.timeStyle = .none
formatter.locale = Locale.current // Se adapta automáticamente al idioma del dispositivo

let localizedDate = formatter.string(from: date)
// Para en: "January 15, 2025"
// Para ru: "15 января 2025 г."
// Para de: "15. Januar 2025"
print(localizedDate)

¡Nada de cadenas dateFormat! Usa .short, .medium, .long — ya tienen en cuenta las reglas culturales.

Números y monedas: respeta las comas y los puntos

En Rusia, el número 1234.56 se escribe como "1 234,56", mientras que en EE. UU. es "1,234.56". NumberFormatter lo sabe:

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 ru_RU: "1 234,56 ₽"
// Para de_DE: "1.234,56 €"
print(localizedPrice)

Pluralización: uno, dos, muchos — no adivines

La regla "uno — muchos" solo funciona en inglés. En ruso hay "1 минута", "2 минуты", "5 минут". En árabe, ¡seis formas! String Catalog y NSStringPluralRule lo resuelven de manera elegante.

En String Catalog añades una clave, indicas el tipo "Plural" y completas las formas:

// En el código                

Blogs

Book Recommendations