- Inicio
- Habilidades
- Revision de Codigo
- Revision de Internacionalizacion
Revision de Internacionalizacion
Revisa implementacion i18n: strings hardcodeados, soporte RTL, formato de fechas y numeros, y reglas de pluralizacion.
El Problema
La internacionalizacion agregada despues del lanzamiento es diez veces mas cara que construirla desde el inicio. Strings hardcodeados se esconden en mensajes de error, tooltips, aria-labels y plantillas de email. El formato de fecha que funciona en EE.UU. se rompe en Alemania (1/2/2026 es 2 de enero o 1 de febrero?). Layouts disenados para ingles colapsan cuando el texto aleman es 30% mas largo o el texto arabe fluye de derecha a izquierda.
El Prompt
Revisa el siguiente codigo por preparacion para internacionalizacion. Actua como un especialista i18n preparando esta aplicacion para lanzamiento en 5 idiomas adicionales.
FRAMEWORK: [ej. React + react-i18next, Vue + vue-i18n, Astro, Next.js]
IDIOMAS ACTUALES: [ej. solo ingles, ingles + aleman]
IDIOMAS OBJETIVO: [ej. aleman, frances, arabe (RTL), japones]
CODIGO:
[pegar codigo de componentes y configuracion i18n]
ARCHIVOS DE TRADUCCION (si los hay):
[pegar archivos JSON/YAML de locale]
Evalua en estas dimensiones:
1. **Externalizacion de Strings**
- Todos los strings visibles al usuario estan extraidos en archivos de traduccion?
- Verificar: labels de botones, mensajes de error, placeholders, aria-labels, titulos de pagina
- Hay concatenaciones de strings que se rompen en otros idiomas?
2. **Formato**
- Las fechas se formatean con Intl.DateTimeFormat?
- Los numeros se formatean con Intl.NumberFormat (separadores decimales varian)?
- Las monedas se muestran correctamente (posicion del simbolo varia)?
3. **Pluralizacion**
- La libreria i18n maneja reglas de plural mas alla de "uno/otros"?
- Hay patrones manuales `count === 1 ? "item" : "items"`?
4. **Layout & RTL**
- Los layouts usan propiedades logicas (margin-inline-start, no margin-left)?
- El atributo `dir` esta establecido en el elemento HTML?
- Los iconos con significado direccional se voltean para RTL?
- La expansion de texto (aleman +30%) rompe layouts?
5. **Calidad de Traducciones**
- Las claves de traduccion son semanticas (user.greeting, no text_1)?
- Se proporciona contexto para traductores?
6. **Setup Tecnico**
- La deteccion de locale esta implementada (URL, cookie, preferencia del navegador)?
- Las URLs especificas por locale estan configuradas para SEO (hreflang, canonical)?
- Las respuestas API estan localizadas?
Para cada problema, proporciona:
- **Ubicacion**: Archivo y linea o clave de traduccion
- **Severidad**: Roto-en-locale / Incompleto / Mejora
- **Idiomas Afectados**: Cuales idiomas impacta
- **Fix**: Codigo correcto para i18n
Ejemplo de Salida
## Revision i18n: 6 problemas encontrados
### Roto en Locale: String Concatenado
Ubicacion: src/components/Greeting.tsx:5
Codigo: `<h1>{"Welcome to " + city + "!"}</h1>`
Problema: El orden de palabras difiere. Aleman: "Willkommen in Berlin!"
Japones: "ベルリンへようこそ!" — la ciudad va en el medio.
Fix: Usar interpolacion:
t('greeting.welcome', { city }) → "Welcome to {{city}}!"
de: "Willkommen in {{city}}!" / ja: "{{city}}へようこそ!"
### Roto en Locale: Formato de Fecha Manual
Ubicacion: src/utils/format.ts:12
Codigo: `${month}/${day}/${year}` — MM/DD/YYYY solo se usa en EE.UU.
Fix:
new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'long', day: 'numeric' }).format(date)
Cuando Usar
Ejecutar antes de agregar un segundo idioma, al auditar una app multilingue existente, o al prepararse para entrar a mercados RTL (arabe, hebreo). Esencial al inicio de cualquier proyecto que eventualmente pueda necesitar localizacion.
Tips Pro
- Probar con idiomas extremos — aleman (palabras largas), japones (sin espacios), arabe (RTL) exponen la mayoria de bugs i18n.
- Usar pseudo-localizacion — “Genera un archivo pseudo-locale que duplique longitudes de strings y agregue acentos para probar resiliencia.”
- Verificar la superficie completa — plantillas de email, generacion de PDF y push notifications frecuentemente se olvidan al extraer strings.
- Revisar etiquetas hreflang — “Verifica que todas las etiquetas hreflang son correctas y forman un conjunto bidireccional completo.”