Localization (localización, l10n) — la adaptación del contenido de una aplicación móvil al idioma, región y características culturales del público objetivo. A diferencia de la internacionalización (i18n), donde el código se prepara para la traducción, la localización es el proceso real de traducir cadenas, formatear fechas, números y monedas, seleccionar imágenes y considerar las normas locales. En iOS, las traducciones se almacenan en Localizable.strings (carpetas .lproj para cada idioma), en Android — en values-ru, values-de y otros directorios de recursos. Más información en la guía de localización de Android.
Puntos clave
Localización (abreviada como l10n — 10 letras entre “l” y “n”) es el proceso de adaptar una aplicación a un idioma y región específicos. Si i18n es el fundamento arquitectónico, entonces l10n es el contenido. i18n hace posible la traducción, l10n la ejecuta. La localización incluye: traducir todos los textos de la interfaz, adaptar formatos de fecha y número, reemplazar imágenes culturalmente sensibles, ajustar textos legales (política de privacidad, EULA), configurar sistemas de pago para la región y probar en dispositivos objetivo.
ROI de negocio — la localización impacta directamente en la conversión. Según CSA Research (2023), el 76% de los usuarios prefieren comprar en aplicaciones en su idioma nativo, y el 40% nunca compra en un idioma extranjero. La localización al japonés para una aplicación minorista aumenta la conversión en un promedio del 150% (Google, 2022). Las aplicaciones localizadas reciben de 2 a 3 veces más instalaciones orgánicas en App Store y Google Play regionales gracias al ASO regional (palabras clave en el idioma objetivo).
i18n vs l10n — dos caras del mismo proceso. i18n: extraer cadenas a recursos, soporte RTL, formateo de números. Se hace una vez por los desarrolladores. l10n: traducir cadenas, adaptar contenido, pruebas locales. Se hace repetidamente por traductores y QA para cada localización. En IT Sectr, asignamos el 20–30% del tiempo del sprint para la localización de cada nuevo idioma — esto incluye traducción, revisión, pruebas en dispositivos y corrección de errores.
Localizable.strings — el archivo principal para almacenar traducciones en iOS. Cada localización tiene su propia carpeta .lproj: en.lproj/Localizable.strings, ru.lproj/Localizable.strings, de.lproj/Localizable.strings. Formato: “clave” = “valor”; (con punto y coma). Apple utiliza Base Internationalization: los Storyboard y XIB se crean una vez (Base.lproj), y las cadenas de la interfaz se exportan a Localizable.strings para cada idioma. Esto elimina la necesidad de crear copias del XIB para cada localización.
// en.lproj/Localizable.strings
// "settings.title" = "Ajustes";
// "profile.greeting" = "¡Hola, %@!";
// "items.count" = "%d artículo(s)";
// ru.lproj/Localizable.strings
// "settings.title" = "Ajustes";
// "profile.greeting" = "¡Hola, %@!";
// "items.count" = "%d artículo(s)";
// Carga de cadena por clave
navigationItem.title = NSLocalizedString(
"settings.title",
comment: "Título de la pantalla de ajustes"
)
// Cadena con parámetro
let name = "Ana"
greetingLabel.text = String.localizedStringWithFormat(
NSLocalizedString("profile.greeting", comment: ""), name
)
// Importación XLIFF (Xcode → Editor → Importar localizaciones)
// Actualiza automáticamente los archivos .lproj después del trabajo del traductor
Base Internationalization — el enfoque de Apple donde la interfaz (Storyboard, XIB) se crea una vez en Base.lproj. Al agregar un idioma, Xcode exporta las cadenas de Base a un archivo XLIFF. El traductor traduce el XLIFF. Después de la importación, Xcode crea .lproj con las cadenas traducidas. Ventaja: no es necesario duplicar el XIB para cada idioma. Limitación: para idiomas RTL (árabe, hebreo), puede ser necesario un XIB separado con diseño espejado.
InfoPlist.strings — archivo para localizar el nombre de la aplicación (CFBundleDisplayName), permisos de cámara/micrófono (NSCameraUsageDescription) y otros valores de Info.plist. Se crea en .lproj: ru.lproj/InfoPlist.strings. Formato: CFBundleDisplayName = “Mi aplicación”; NSCameraUsageDescription = “La aplicación necesita acceso a la cámara para tomar fotos”;. Sin la localización de InfoPlist.strings, los diálogos del sistema estarán en inglés.
Recursos de Android para la localización se organizan mediante calificadores en los nombres de directorio. Para ruso — res/values-ru/, para alemán — res/values-de/, para portugués brasileño — res/values-pt-rBR/. Android admite más de 160 localizaciones. El sistema selecciona automáticamente los recursos según el idioma del dispositivo (Locale.getDefault()). Si no se encuentra una localización exacta, se utilizan los recursos de values/ (localización base, normalmente en).
// res/values/strings.xml (base — inglés)
<string name="settings_title">Settings</string>
<string name="greeting">Hello, %s!</string>
// res/values-ru/strings.xml (ruso)
<string name="settings_title">Ajustes</string>
<string name="greeting">¡Hola, %s!</string>
// res/values-de/strings.xml (alemán)
<string name="settings_title">Einstellungen</string>
<string name="greeting">Hallo, %s!</string>
// Kotlin — código único para todos los idiomas
textView.text = getString(R.string.settings_title)
// Cadena con parámetro
val greeting = getString(R.string.greeting, userName)
// Imágenes localizadas
// res/drawable-ru/flag.png — bandera para la versión rusa
// res/drawable/flag.png — bandera por defecto
// Localización de diseños (para idiomas RTL)
// res/layout-ar/activity_main.xml — versión árabe
Localización más allá de las cadenas — Android permite localizar imágenes (res/drawable-ru/), colores (res/values-ru/colors.xml), dimensiones (res/values-ru/dimens.xml), animaciones, menús e incluso diseños completos. Para idiomas con diferente longitud de palabras (el alemán es 30–40% más largo que el inglés), use dimens.xml localizados con anchos de botón aumentados. Para regiones con diferente simbolismo de color (el blanco es luto en China), use colors.xml localizados.
Pruebas — cambie el idioma del dispositivo al idioma objetivo mediante Configuración → Sistema → Idioma. Verifique: todas las cadenas están traducidas, las fechas se formatean correctamente, los números se muestran con el separador adecuado, las imágenes coinciden con la región, el diseño no se rompe con cadenas largas. Para automatización, use Espresso con LocaleTestRule (Android Testing Library) — permite ejecutar pruebas con diferentes localizaciones sin cambiar el idioma manualmente.
Características culturales — la localización no se limita a traducir cadenas. El simbolismo del color varía: rojo es suerte en China, peligro en EE.UU., luto en Sudáfrica. Blanco es pureza en Europa, luto en China. Iconos con gestos: pulgar arriba es positivo en EE.UU., un insulto en Oriente Medio. Imágenes de personas: en países árabes, las imágenes de mujeres en traje de baño son inaceptables. Símbolos religiosos: cruz, media luna, estrella de David deben usarse solo en el contexto apropiado.
Requisitos legales — cada país tiene sus propias leyes sobre productos digitales. GDPR (UE) — consentimiento obligatorio para cookies y procesamiento de datos. CCPA (California) — derecho a eliminar datos. Ley de Datos Personales (Rusia, 152-FZ) — almacenamiento de datos en servidores rusos. LGPD (Brasil) — equivalente al GDPR. Pagos: en China se necesitan Alipay/WeChat Pay, en India — UPI, en Brasil — Boleto y PIX. Configure la pasarela de pago para la región antes de lanzar la localización.
| Aspecto | EE.UU. | China | EAU | Alemania |
|---|---|---|---|---|
| Sistema de pago | Apple Pay, Tarjetas | Alipay, WeChat Pay | Tarjetas, Apple Pay | PayPal, Giropay |
| Colores de marca | Cualquiera | Rojo — suerte | Verde — Islam | Negro/Amarillo |
| Redes sociales | Instagram, X | WeChat, Douyin | WhatsApp, X | WhatsApp, X |
| Fecha | MM/dd/yyyy | yyyy/MM/dd | dd/MM/yyyy | dd.MM.yyyy |
| Ley de datos | CCPA | PIPL | PDPL | GDPR |
Ejemplos y contenido — adapte los ejemplos a la región. Para la localización alemana, use el sistema métrico (kg, km), para la estadounidense — imperial (lb, mi). Números de teléfono, códigos postales, direcciones — todo se formatea de manera diferente. Ejemplos de moneda: ¥1000 en Japón, $9.99 en EE.UU., 999 ₽ en Rusia. Las imágenes de comida, ropa e interiores deben coincidir con los estándares regionales. En IT Sectr, recomendamos contratar consultores locales para verificar la adaptación cultural.
Herramientas de localización — plataformas profesionales automatizan el proceso: Lokalise, Crowdin, POEditor, Smartling, Phrase. Se integran con el repositorio, importan automáticamente nuevas cadenas, rastrean cambios (Delta updates — solo se traducen las cadenas modificadas), proporcionan Memoria de Traducción (TM — almacenamiento de frases traducidas previamente) y Glosario. Costo promedio de traducción profesional: $0.08–0.15 por palabra (según el idioma).
Proceso — (1) El desarrollador agrega claves i18n al código, sube al repositorio. (2) CI/CD (GitHub Actions / GitLab CI) envía automáticamente nuevas claves a la plataforma de localización. (3) Los traductores reciben notificación, traducen y guardan. (4) Los archivos traducidos crean automáticamente un PR en el repositorio. (5) QA verifica la localización en dispositivos. (6) Lanzamiento. Ciclo para una localización: 2–5 días hábiles (según el volumen). Para 10 localizaciones: 5–15 días con trabajo paralelo de traductores.
Traducción automática + revisión humana — el estándar moderno. La traducción mediante redes neuronales (DeepL, Google Translate, GPT-4) proporciona una calidad del 80–90% para pares de idiomas populares. Un traductor humano verifica: terminología, contexto (las palabras pueden tener diferentes significados en diferentes pantallas), adaptación cultural. En IT Sectr, utilizamos un enfoque híbrido: traducción ML + revisión por un hablante nativo. Para cadenas críticas (legales, de pago) — solo traducción profesional. Ahorro: hasta el 60% del costo manteniendo la calidad.
Preguntas frecuentes
Internacionalización — preparación del código para la traducción (extraer cadenas, RTL, formateo). Localización — la traducción real y la adaptación cultural. i18n lo hace el desarrollador una vez, l10n — los traductores para cada idioma. i18n sin l10n — la aplicación está lista para traducir pero no traducida. l10n sin i18n — hay que reescribir el código para cada idioma.
En archivos Localizable.strings dentro de carpetas .lproj. Para cada idioma: en.lproj (inglés), ru.lproj (ruso), de.lproj (alemán). Formato: “clave” = “valor”;. Para plurales — Localizable.stringsdict. Configuración de la aplicación (CFBundleDisplayName) — en InfoPlist.strings. Xcode gestiona .lproj mediante Base Internationalization.
values-ru — un directorio de recursos Android para el idioma ruso. Contiene strings.xml con traducciones. Similarmente para otros idiomas: values-de (alemán), values-fr (francés). Android selecciona los recursos según el idioma del sistema. Si no se encuentra values-ru, usa values/ (idioma base, normalmente inglés).
Use siempre la API Locale. iOS: DateFormatter.locale = Locale(identifier: locale). Android: DateFormat.getDateInstance(DateFormat.SHORT, locale). Rusia: 31.12.2024. EE.UU.: 12/31/2024. Japón: 2024/12/31. Nunca establezca un formato fijo — cada país tiene sus propios estándares. Para entrada de fechas, use UIDatePicker / DatePicker.
Para alcance global, 10–15 idiomas son suficientes: inglés, español, francés, alemán, japonés, chino, coreano, portugués, ruso, italiano, árabe. Para regional — 1–2 idiomas. Cada localización adicional aumenta las instalaciones orgánicas en un 5–15% en la región correspondiente. App Store requiere al menos localización en inglés.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también