Traducir tu app iOS es esencial para llegar a una audiencia global. Apple proporciona excelentes herramientas integradas para la localización en Xcode, lo que hace que sea sencillo soportar múltiples idiomas. Esta guía te guiará a través del proceso de traducir una app iOS usando Swift.
Entendiendo la Localización en iOS
La localización de iOS utiliza archivos Localizable.strings para almacenar traducciones para diferentes idiomas. Xcode carga automáticamente las cadenas correctas basándose en la configuración de idioma del dispositivo del usuario.
Paso 1: Habilitar la Localización en tu Proyecto
Primero, necesitas habilitar la localización para tu proyecto:
- Abre tu proyecto en Xcode
- Selecciona tu proyecto en el Navegador de Proyectos
- Ve a la pestaña Info
- En Localizations, haz clic en el botón +
- Añade los idiomas que quieres soportar (por ejemplo, Español, Francés, Alemán)
Paso 2: Crear Archivos Localizable.strings
Para cada idioma, crearás un archivo Localizable.strings:
- En Xcode, ve a File > New > File
- Selecciona Strings File bajo Resource
- Nómbralo
Localizable.strings - En el Inspector de Archivos, haz clic en Localize…
- Selecciona los idiomas que quieres soportar
Paso 3: Añadir Cadenas de Traducción
En tus archivos Localizable.strings, añade pares clave-valor para cada idioma:
Inglés (Localizable.strings):
"welcome_message" = "Welcome to our app!";
"button_submit" = "Submit";
"error_network" = "Network error. Please try again.";
"items_count" = "%d items";
Español (Localizable.strings (es)):
"welcome_message" = "¡Bienvenido a nuestra aplicación!";
"button_submit" = "Enviar";
"error_network" = "Error de red. Por favor, inténtalo de nuevo.";
"items_count" = "%d elementos";
Paso 4: Usar NSLocalizedString en tu Código
Reemplaza las cadenas codificadas con NSLocalizedString:
Antes:
let welcomeLabel = UILabel()
welcomeLabel.text = "Welcome to our app!"
Después:
let welcomeLabel = UILabel()
welcomeLabel.text = NSLocalizedString("welcome_message", comment: "Mensaje de bienvenida mostrado en la pantalla de inicio")
Paso 5: Manejar el Formato de Cadenas
Para cadenas con variables, usa String.localizedStringWithFormat:
let itemCount = 5
let message = String.localizedStringWithFormat(
NSLocalizedString("items_count", comment: "Número de elementos"),
itemCount
)
// Inglés: "5 items"
// Español: "5 elementos"
Paso 6: Pluralización
iOS soporta pluralización usando archivos .stringsdict. Crea un archivo Localizable.stringsdict:
Localizable.stringsdict:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items_count</key>
<dict>
<key>NSStringLocalizedFormatKey</key>
<string>%#@items@</string>
<key>items</key>
<dict>
<key>NSStringFormatSpecTypeKey</key>
<string>NSStringPluralRuleType</string>
<key>NSStringFormatValueTypeKey</key>
<string>d</string>
<key>zero</key>
<string>No items</string>
<key>one</key>
<string>%d item</string>
<key>other</key>
<string>%d items</string>
</dict>
</dict>
</dict>
</plist>
Uso:
let count = 1
let message = String.localizedStringWithFormat(
NSLocalizedString("items_count", comment: ""),
count
)
// Inglés: "1 item" (singular)
// Inglés: "5 items" (plural)
Paso 7: Localizar Imágenes y Recursos
También puedes localizar imágenes:
- Selecciona una imagen en tu Assets.xcassets
- En el Inspector de Atributos, marca Localize
- Proporciona diferentes imágenes para cada idioma
O usa nombres de imágenes localizados:
let imageName = NSLocalizedString("icon_name", comment: "")
let image = UIImage(named: imageName)
Paso 8: Formatear Fechas y Números
Usa Locale y DateFormatter para el formato localizado:
let date = Date()
let formatter = DateFormatter()
formatter.locale = Locale.current
formatter.dateStyle = .long
formatter.timeStyle = .short
let localizedDate = formatter.string(from: date)
// Inglés: "March 20, 2025 at 10:00 AM"
// Español: "20 de marzo de 2025, 10:00"
Para números:
let number = 1234.56
let formatter = NumberFormatter()
formatter.locale = Locale.current
formatter.numberStyle = .decimal
let localizedNumber = formatter.string(from: NSNumber(value: number))
// Inglés: "1,234.56"
// Español: "1.234,56"
Paso 9: Probar tu Localización
Prueba tu app en diferentes idiomas:
- En Xcode, ve a Product > Scheme > Edit Scheme
- Selecciona Run y ve a Options
- Cambia Application Language para probar diferentes idiomas
- Ejecuta tu app para ver las traducciones
O prueba en un dispositivo:
- Ve a Settings > General > Language & Region
- Cambia el idioma del dispositivo
- Lanza tu app
Mejores Prácticas
1. Usar Claves Descriptivas
Malo:
NSLocalizedString("msg1", comment: "")
Bueno:
NSLocalizedString("welcome_screen_title", comment: "Título mostrado en la pantalla de bienvenida")
2. Proporcionar Contexto en los Comentarios
Siempre incluye comentarios para ayudar a los traductores a entender el contexto:
NSLocalizedString("delete_button", comment: "Botón para eliminar un elemento. Mostrado en la vista de detalle del elemento.")
3. Evitar Concatenar Cadenas
Malo:
let message = NSLocalizedString("hello", comment: "") + " " + name
Bueno:
let message = String.localizedStringWithFormat(
NSLocalizedString("hello_user", comment: "Saludo con nombre de usuario"),
name
)
4. Manejar Idiomas de Derecha a Izquierda
iOS maneja automáticamente idiomas RTL como el árabe y el hebreo. Asegúrate de que tus restricciones de UI soporten ambas direcciones:
// Usa leading/trailing en lugar de left/right
button.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20)
5. Probar Longitudes de Cadenas
Algunos idiomas son más largos que otros. El alemán y el finlandés, por ejemplo, pueden ser 30-50% más largos que el inglés. Diseña tu UI para acomodar texto más largo.
Errores Comunes
1. Olvidar Localizar Todas las Cadenas
Asegúrate de localizar todas las cadenas visibles para el usuario, incluyendo:
- Etiquetas de botones
- Mensajes de error
- Títulos de alertas
- Texto de marcador de posición
2. Codificar Cadenas de Formato
Malo:
let price = String(format: "$%.2f", amount)
Bueno:
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale.current
let price = formatter.string(from: NSNumber(value: amount)) ?? ""
3. No Probar Casos Extremos
Prueba con:
- Cadenas muy largas
- Caracteres especiales
- Números y fechas
- Formas plurales
Avanzado: Cambio Dinámico de Idioma
Para permitir a los usuarios cambiar el idioma dentro de la app:
func changeLanguage(to language: String) {
UserDefaults.standard.set([language], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
// Reiniciar app o recargar UI
Bundle.setLanguage(language)
}
Nota: Esto requiere configuración adicional y puede requerir reiniciar la app.
Conclusión
Localizar tu app iOS con Swift es sencillo cuando sigues estos pasos:
- Habilita la localización en Xcode
- Crea archivos
Localizable.stringspara cada idioma - Usa
NSLocalizedStringen todo tu código - Maneja la pluralización con archivos
.stringsdict - Formatea fechas y números usando
Locale - Prueba exhaustivamente en todos los idiomas soportados
Siguiendo estas prácticas, crearás una app que proporciona una experiencia nativa para usuarios de todo el mundo, expandiendo significativamente tu base de usuarios potencial.
Optimiza tu Flujo de Trabajo de Localización iOS
Gestionar traducciones para múltiples idiomas puede volverse complejo a medida que tu app crece. Considera usar una plataforma de gestión de traducciones para:
- Colaborar con traductores
- Mantener las traducciones sincronizadas con tu código base
- Automatizar el flujo de trabajo de traducción
- Mantener la consistencia en todos los idiomas
¿Listo para llevar tu app iOS a nivel global? Explora la plataforma de localización de AZbox y optimiza tu flujo de trabajo de traducción: