Respuesta rápida
La localización de software consiste en adaptar tu aplicación a diferentes idiomas, regiones y culturas. Implica tres fases: (1) Internacionalización (i18n) - diseñar el código para soportar múltiples locales, (2) Traducción - convertir texto con contexto, y (3) Adaptación cultural - ajustar formatos, imágenes y UX para cada mercado. Empieza con una arquitectura i18n, utiliza un TMS como IntlPull para gestionar la traducción y haz pruebas con hablantes nativos. Presupueste entre el 15 y el 30% del tiempo de desarrollo para una localización adecuada.
¿Qué es la localización de software?
La localización de software (l10n) es el proceso de adaptar un programa informático a una localización o mercado específicos. Va más allá de la traducción e incluye
| Aspecto | Qué abarca |
|---|---|
| Idioma: texto de la interfaz de usuario, mensajes de error, documentación | |
| Formatos: fechas, números, divisas, direcciones | |
| Culturales: colores, imágenes, iconos, metáforas | |
| Legal: Políticas de privacidad, condiciones, conformidad | |
| Técnico: codificación de caracteres, dirección del texto, diseño |
Localización vs Internacionalización vs Globalización
| Término, definición, ejemplo |------|------------|---------| | Internacionalización (i18n) | Diseño de software para soportar localización | Externalización de cadenas, soporte Unicode | Localización (i18n) | Localización (l10n)** Adaptación a una localización específica Traducción al español, formateo de fechas | Globalización (g11n) | Estrategia empresarial para mercados globales | Estudio de mercado, estrategias de precios |
i18n es un esfuerzo de ingeniería que se realiza una sola vez. l10n es continuo para cada nuevo mercado.
El proceso de localización
Fase 1: Internacionalización (i18n)
Antes de proceder a la localización, el código debe estar preparado para la internacionalización:
1. Externalizar todas las cadenas
JavaScript1// ❌ Bad: Hardcoded strings 2const message = "Welcome back, " + user.name + "!"; 3 4// ✅ Good: Externalized with i18n library 5const message = t('welcome', { name: user.name }); 6// Translation: "Welcome back, {{name}}!"
2. Soporta Unicode (UTF-8)
HTML<!-- Always declare UTF-8 --> <meta charset="UTF-8">
JavaScript// Database must support UTF-8 // MySQL: CHARACTER SET utf8mb4 // PostgreSQL: ENCODING 'UTF8'
3. Evitar la concatenación de cadenas
JavaScript1// ❌ Bad: Word order varies by language 2const text = "The " + item + " costs " + price; 3 4// ✅ Good: Full sentence with placeholders 5const text = t('itemCost', { item, price }); 6// English: "The {{item}} costs {{price}}" 7// German: "{{item}} kostet {{price}}"
4. Manejar la pluralización
JavaScript1// ❌ Bad: Only handles singular/plural 2const text = count === 1 ? "1 item" : count + " items"; 3 4// ✅ Good: Proper plural rules (Russian has 4 forms!) 5const text = t('items', { count });
5. Diseño para la expansión del texto
| Idioma | Expansión vs Inglés |
|---|---|
| Alemán: +30% | |
| Finés: +30-40% | |
| Ruso: +20% | |
| Chino -50 | |
| Japonés -10 |
CSS1/* Allow for text expansion */ 2.button { 3 min-width: 100px; 4 padding: 0.5rem 1rem; 5 /* Don't use fixed width */ 6}
6. Compatible con idiomas RTL
CSS1/* Use logical properties */ 2.sidebar { 3 margin-inline-start: 1rem; /* Not margin-left */ 4 padding-inline-end: 1rem; /* Not padding-right */ 5} 6 7/* Or use dir attribute */ 8[dir="rtl"] .sidebar { 9 margin-right: 1rem; 10 margin-left: 0; 11}
Fase 2: Traducción
La traducción requiere algo más que la conversión palabra por palabra:
1. El contexto es fundamental
JSON1{ 2 "save": "Save", 3 "save_description": "Button to save document changes (not discount/sale)" 4}
Sin contexto, un traductor podría usar "descuento" o "rescate" en lugar de "preservar"
2. Traducción profesional frente a traducción automática
| Enfoque | Lo mejor para | Calidad | Coste | Traducción automática |----------|----------|---------|------| | Humano profesional | Marketing, jurídico, interfaz de usuario | Más alto | 0,10-0,25 $/palabra | Traducción automática | Inteligencia artificial + revisión humana Contenido técnico Alto 0,03-0,08 $/palabra | Sólo máquina Herramientas internas, prototipos Medio 0,001-0,01 $/palabra
**3. Flujo de trabajo de traducción
Developer → TMS → Translator → Reviewer → QA → Deploy
↓ ↓ ↓ ↓ ↓
Writes Uploads Translates Reviews Tests
code strings content quality in-app
Fase 3: Adaptación cultural
1. Formatos de fecha y hora
| Región Formato Ejemplo |--------|--------|---------| | EE.UU.: MM/DD/AAAA: 17/01/2026 | Europa: DD/MM/AAAA: 17/01/2026 | Japón AAAA/MM/DD 2026/01/17 | Relativo | Varía | "Hace 2 horas" |
JavaScript1// Use Intl API 2const date = new Intl.DateTimeFormat(locale, { 3 dateStyle: 'medium' 4}).format(new Date());
2. Formatos de números y monedas
| Región Número Moneda |--------|--------|----------| | EE.UU. | 1.234,56 | 1.234,56 | ALEMANIA | 1.234,56 | Alemania | 1.234,56 € | 1.234,56 | India | 1.23.456,78 | ₹1.23.456,78 |
JavaScript1const price = new Intl.NumberFormat(locale, { 2 style: 'currency', 3 currency: 'EUR' 4}).format(1234.56);
3. Imágenes e iconos
| Elemento | Considerar |
|---|---|
| Gestos con las manos. Pulgar hacia arriba ofensivo en Oriente Medio | |
| Animales: Búho = mala suerte en algunas culturas | |
| Colores Blanco = muerte en Asia, pureza en Occidente | |
| Banderas: implicaciones políticas | |
| Sentido de la lectura Disposición de los espejos para RTL |
**4. Requisitos legales
| Región |--------|--------------| | Cumplimiento GDPR, consentimiento de cookies | China: Licencia ICP, alojamiento local | Alemania: Impressum requerido | Brasil: Cumplimiento de la LGPD
Implementación técnica
Formatos de los archivos de traducción
| Formato | Pros | Contras | Mejor para |
|---|---|---|---|
| JSON | Simple, universal | Sin plurales en forma básica | Aplicaciones web |
| YAML legible, comentarios, sensible a la sangría, con mucha configuración | |||
| Estándar industrial Complejo Empresa, herramientas CAT | |||
| Herramientas maduras, formato obsoleto, sistemas heredados | |||
| Android XML Android nativo Sólo Android Móvil | |||
| iOS cadenas** iOS nativo iOS sólo móvil |
JSON Ejemplo:
JSON1{ 2 "common": { 3 "buttons": { 4 "save": "Save", 5 "cancel": "Cancel" 6 } 7 } 8}
XLIFF Ejemplo:
XML1<xliff version="2.0"> 2 <file id="common"> 3 <unit id="buttons.save"> 4 <segment> 5 <source>Save</source> 6 <target>Guardar</target> 7 </segment> 8 </unit> 9 </file> 10</xliff>
Architecture Patterns
1. Carga en tiempo de ejecución
JavaScript1// Load translations at runtime 2async function loadTranslations(locale) { 3 const translations = await fetch(`/locales/${locale}.json`); 4 i18n.addResourceBundle(locale, 'translation', translations); 5}
2. Agrupación en tiempo de compilación
JavaScript1// Import at build time (smaller runtime, larger bundles) 2import en from './locales/en.json'; 3import es from './locales/es.json'; 4 5i18n.init({ 6 resources: { en: { translation: en }, es: { translation: es } } 7});
3. Híbrido (recomendado)
JavaScript1// Bundle critical, lazy load the rest 2import common from './locales/en/common.json'; 3 4i18n.init({ 5 resources: { en: { common } }, 6 // Lazy load other namespaces 7 backend: { loadPath: '/locales/{{lng}}/{{ns}}.json' } 8});
Integración CI/CD
YAML1# .github/workflows/i18n.yml 2name: i18n Pipeline 3on: [push] 4 5jobs: 6 extract: 7 runs-on: ubuntu-latest 8 steps: 9 - uses: actions/checkout@v4 10 11 - name: Extract new strings 12 run: npx @intlpullhq/cli extract 13 14 - name: Upload to TMS 15 run: npx @intlpullhq/cli upload 16 env: 17 INTLPULL_API_KEY: ${{ secrets.INTLPULL_API_KEY }} 18 19 - name: Check translation coverage 20 run: npx @intlpullhq/cli status --min-coverage 90 21 22 - name: Download translations 23 run: npx @intlpullhq/cli download 24 25 - name: Commit updated translations 26 run: | 27 git add locales/ 28 git commit -m "chore: update translations" || exit 0 29 git push
Pruebas de software localizado
1. Pseudolocalización
Pruebe la disponibilidad de i18n sin traducciones reales:
JavaScript1// Pseudo-locale transforms text 2"Save" → "[Šåvé !!!]" 3 4// Tests for: 5// - Character encoding issues 6// - Text expansion (adds padding) 7// - Missing externalized strings 8// - Truncation problems
2. Pruebas funcionales
| Prueba | Qué comprobar |
|---|---|
| Carga de cadenas. Todas las cadenas se cargan correctamente | |
| Cambio de idioma: El cambio de idioma funciona | |
| Fallbacks: Las traducciones que faltan utilizan fallbacks | |
| Formato: Fechas, números y divisas correctos | |
| Diseño: sin desbordamientos ni truncamientos |
3. Pruebas lingüísticas
✓ Grammar and spelling correct
✓ Terminology consistent
✓ Context appropriate
✓ Cultural references valid
✓ Tone matches brand
4. Pruebas visuales
JavaScript1// Screenshot testing with Playwright 2test('homepage renders correctly in German', async ({ page }) => { 3 await page.goto('/de'); 4 await expect(page).toHaveScreenshot('homepage-de.png'); 5});
5. Pruebas de accesibilidad
HTML1<!-- Announce language to screen readers --> 2<html lang="de"> 3 4<!-- Label translated content --> 5<span lang="es">Hola</span>
Sistemas de gestión de la traducción (TMS)
Un TMS agiliza el flujo de trabajo de localización:
Características principales
| Característica | Beneficio |
|---|---|
| Repositorio central | Fuente única de la verdad |
| Memoria de traducción: reutilización de traducciones anteriores | |
| Glosario: terminología coherente | |
| Flujo de trabajo: proceso de revisión y aprobación | |
| API/CLI Automatización de la sincronización con el código | |
| Editor en contexto: ver las traducciones en la interfaz de usuario | |
| Traducción automática: primeros borradores rápidos |
TMS Comparación
| Traducción por frases: IntlPull, Lokalise, Feature |---------|----------|----------|--------| | Precio inicial | content: 2/mes | content: 20/mes | content: 25/mes | Traducción AI | Sí (AI) | Traducción IA Sí (GPT-4, Claude) Sí Sí Sí | Actualizaciones OTA Sí Sí No | CLI Sí Sí Sí Sí Sí | Integración MCP Sí No No | Nivel gratuito Sí No No
Flujo de trabajo IntlPull
Terminal1# Initialize project 2npx @intlpullhq/cli init 3 4# Extract strings from code 5npx @intlpullhq/cli extract --source src/ 6 7# Upload to IntlPull 8npx @intlpullhq/cli upload 9 10# AI translate to target languages 11npx @intlpullhq/cli translate --target es,fr,de,ja 12 13# Download translations 14npx @intlpullhq/cli download --output locales/
Coste y Calendario
Presupuesto de localización
| Componente Intervalo de costes |-----------|------------| Ingeniería de i18n 10-20% del presupuesto de desarrollo | Traducción: 0,03-0,25 $/palabra | Herramientas TMS 12-500 $/mes | Pruebas de control de calidad: 5-10% del presupuesto de control de calidad | Mantenimiento continuo: 5-10% del coste inicial
Calendario estimado
| Tamaño del proyecto Configuración de i18n por idioma |--------------|------------|--------------| | Pequeño (1.000 cadenas) 1-2 semanas 1 semana | Mediana (5.000 cadenas): 2-4 semanas: 2-3 semanas | Grande (20K+ cadenas) 1-2 meses 1-2 meses
Cálculo del ROI
Potential Revenue = Target Market Size × Conversion Rate × ARPU
Localization Cost = Translation + Engineering + Tools + QA
ROI = (Revenue - Cost) / Cost × 100
Example:
- German market: 10,000 potential users
- Conversion rate: 5% (vs 2% without localization)
- ARPU: $50/year
- Revenue: 10,000 × 5% × $50 = ,5,000
- Cost: $5,000
- ROI: (,5,000 - $5,000) / $5,000 = 400%
Mejores prácticas
1. Comience con i18n temprano
Añadir la localización a un código existente es 2-3 veces más caro que incorporarla desde el principio.
2. Use traducción profesional para el contenido de cara al usuario
La traducción automática está muy bien para las herramientas internas y los primeros borradores, pero el contenido de cara al usuario necesita una revisión humana.
3. Proporcione contexto a los traductores
JSON1{ 2 "save": { 3 "value": "Save", 4 "context": "Button to save document. Max 10 characters.", 5 "screenshot": "https://app.com/editor-screenshot.png" 6 } 7}
4. Pruebas con usuarios reales
Los hablantes nativos detectan los problemas que las pruebas automáticas pasan por alto. Realice pruebas de usabilidad en cada mercado objetivo.
5. Plan de localización continua
Las nuevas funciones necesitan traducciones. Integre la traducción en su proceso de sprints.
6. Utilice un TMS
La gestión manual de archivos no es escalable. IntlPull automatiza la sincronización, la memoria de traducción y la colaboración en equipo.
Errores comunes
| Error Impacto Solución |---------|--------|----------| | Cadenas mal codificadas Necesidad de reingeniería Externalizar desde el primer día | Cadenas concatenadas Traducciones incorrectas Utilizar frases completas | Diseños de ancho fijo, desbordamiento de texto, CSS flexible | Ignorar RTL Diseños rotos Propiedades lógicas de CSS | Traducción automática de mala calidad Revisión humana | Sin contexto Traducciones erróneas Capturas de pantalla, descripciones | Sincronización manual de archivos Conflictos de versiones Automatización CI/CD
Preguntas frecuentes
¿Qué es la localización de software?
La localización de software (l10n) consiste en adaptar las aplicaciones a diferentes idiomas, regiones y culturas. Incluye traducir el texto de la interfaz de usuario, ajustar los formatos de fecha y número, adaptar las imágenes y los colores para que sean culturalmente apropiados y garantizar el cumplimiento de la legislación. Es más que traducir: es hacer que el software se sienta nativo en cada mercado.
¿Cuál es la diferencia entre localización e internacionalización?
**La internacionalización (i18n) consiste en diseñar el software para que admita varias localizaciones, lo que incluye la externalización de cadenas, la compatibilidad con Unicode y el uso de API que tengan en cuenta la localización. La localización (l10n) es la adaptación real a una localización específica. La i18n es un esfuerzo de ingeniería que se realiza una sola vez; la l10n se repite para cada mercado.
¿Cuánto cuesta la localización de software?
La localización cuesta entre 0,03 y 0,25 dólares por palabra traducida, más un 10-20% del presupuesto de desarrollo para ingeniería i18n. La traducción de una aplicación de 10.000 palabras cuesta entre 300 y 2.500 dólares por idioma. Las herramientas TMS cuestan entre 12 y 500 dólares al mes. Coste total del primer idioma: entre 2.000 y 15.000 dólares para una aplicación media; los idiomas siguientes son más baratos gracias a la memoria de traducción.
¿Cuánto tarda la localización?
La configuración inicial de i18n lleva de 2 a 4 semanas para una aplicación mediana. Cada idioma lleva de 1 a 3 semanas, incluyendo traducción, revisión y control de calidad. La localización continua añade 1-3 días por sprint para la traducción de nuevas funciones. El uso de la traducción IA con revisión humana puede reducir el tiempo de traducción en un 50-70%.
¿Qué es un sistema de gestión de la traducción (TMS)?
Un TMS es un software que gestiona el flujo de trabajo de localización. Proporciona un repositorio central para traducciones, memoria de traducción (reutilización de traducciones anteriores), glosarios terminológicos, flujos de trabajo de revisión e integración API/CLI con tu código base. Ejemplos: IntlPull, Lokalise, Phrase, Crowdin.
¿Debo utilizar traducción automática o traductores humanos?
**La traducción automática (Google, DeepL, GPT-4) proporciona primeros borradores rápidos a bajo coste. Los traductores humanos garantizan la calidad, la adecuación cultural y la voz de la marca. En el caso de los contenidos orientados al usuario, siempre debe ser un hablante nativo quien revise las traducciones automáticas.
¿Qué formato de archivo debo utilizar para las traducciones?
JSON es el mejor para la mayoría de aplicaciones web por su sencillez y compatibilidad universal. Utilice XLIFF para proyectos empresariales que requieran compatibilidad con herramientas TAO. Utilice formatos nativos (Android XML, iOS .strings) para aplicaciones móviles. IntlPull es compatible con todos los formatos principales y los convierte automáticamente.
¿Cómo pruebo el software localizado?
Utilice una combinación de pruebas automatizadas y manuales. La pseudolocalización comprueba la implementación i18n sin traducciones. Las pruebas automatizadas verifican la carga de cadenas, el formato y el diseño. Las pruebas lingüísticas comprueban la calidad de la traducción. Las pruebas visuales detectan los problemas de la interfaz de usuario. Las pruebas con hablantes nativos garantizan la adecuación cultural.
¿Qué es la pseudolocalización?
La pseudo-localización transforma el texto en inglés para comprobar la preparación para i18n. Sustituye los caracteres por versiones acentuadas ("Save" → "Šåvé"), añade relleno para la expansión del texto y envuelve las cadenas con corchetes. De este modo se detectan cadenas codificadas, problemas de truncamiento y problemas de codificación sin necesidad de traducciones reales.
¿Cómo priorizo qué idiomas localizar?
Priorice por oportunidad de mercado y coste. Tenga en cuenta: el tamaño del mercado objetivo, la demanda existente de los usuarios (compruebe las analíticas para conocer la ubicación de los visitantes), el panorama competitivo y el coste de la traducción. Empiece por los idiomas de mayor impacto, como el español (500 millones de hablantes), el alemán (alto poder adquisitivo) o el chino (mayor mercado). IntlPull puede analizar sus datos de usuario para recomendarle idiomas.
Resumen
La localización de software requiere una cuidadosa planificación en tres fases:
| Fase | Actividades clave |
|---|---|
| i18n | Externalización de cadenas, compatibilidad con Unicode, diseños flexibles |
| Traducción profesional con contexto, flujo de trabajo TMS | |
| Adaptación | Formatear fechas/números, adaptar elementos visuales, cumplimiento legal |
Factores críticos de éxito:
- Integrar i18n en su arquitectura desde el primer día
- Utilizar un TMS para automatizar los flujos de trabajo de traducción
- Proporcione contexto a los traductores
- Pruebas con hablantes nativos
- Plan de localización continua
IntlPull simplifica la localización con traducción AI, actualizaciones OTA e integración CI/CD sin fisuras. Gestione traducciones sin gestionar archivos.
¿Preparado para globalizarse? Empezar gratis con IntlPull - Localización potenciada por IA para equipos modernos.
