Añadí 5 Idiomas a DIALØGUE en 48 Horas
Creé documentos de planificación que le enseñaron a Claude Code cómo localizar — no solo traducir — y luego lo vi ejecutar en 5 idiomas en paralelo, convirtiendo frases literales en textos que suenan nativos.
Hace unos días, un usuario preguntó si DIALØGUE soportaba español.
No lo soportaba.
48 horas después, soporta cinco idiomas — español, vietnamita, japonés, coreano y chino mandarín. No botones de UI traducidos. Localización nativa completa. Podcasts que suenan como si hubieran sido creados para cada mercado.
Cinco idiomas en 48 horas suena a que contraté un equipo o a que no dormí. No hice ninguna de las dos cosas.
Le di a Claude Code dirección de alto nivel. Escribió los documentos de planificación, luego los ejecutó — a menudo lanzando agentes en paralelo sobre diferentes archivos simultáneamente.
---
El Secreto: Planificar Una Vez, Ejecutar Rápido
Aquí está la parte interesante: yo no escribí los documentos de planificación. Claude Code lo hizo — con mi orientación.
Describí lo que quería: "Crea una guía de estilo de localización que explique cómo traducir de forma natural, no literal. Incluye ejemplos para español, vietnamita, japonés, coreano y chino. Cubre los niveles de formalidad y el contexto cultural."
Claude Code produjo una guía de estilo de más de 1.000 líneas, un checklist exhaustivo y un playbook del pipeline del backend. Luego siguió sus propios planes para ejecutar el trabajo.
1. La Guía de Estilo
No un glosario de traducción — un documento de filosofía. Explica *cómo* localizar, con ejemplos de antes/después para cada idioma.
Ejemplo de entrada para español:
| English | Literal (Wrong) | Natural (Right) |
|---------|-----------------|-----------------|
| "Ideas, Produced" | "Ideas, Producidas" | "De la Idea, al Podcast" |
| "Researched, Not Recycled" | "Investigado, No Reciclado" | "Contenido Original, Sin Copiar" |
| "You Direct" | "Tú Diriges" | "Tú Decides" |
Las traducciones literales son gramaticalmente correctas pero suenan a Google Translate. Las versiones naturales capturan la *intención* — son lo que un profesional de marketing hispanohablante realmente escribiría.
La guía cubre los niveles de formalidad (el japonés usa la forma です/ます, el coreano usa 합쇼체), el contexto cultural, los errores comunes que hay que evitar. Cuando Claude Code traduce, sigue estos principios — los que él mismo escribió — automáticamente.
2. El Checklist de Localización
Un checklist exhaustivo de cada archivo que necesita cambiar para un nuevo idioma:
Obligatorio (imprescindible):
- Frontend: `messages/{locale}.json` (~2.200 claves)
- Backend: `locales/{locale}.json` (~82 claves)
- Language Utils: 3 funciones en `language_utils.py`
- Speech Generation: 1 función en `gemini_voice_instructions.py`
- Voice Preview: 7 frases localizadas
- Content Moderation: Palabras clave + prompts
- Smoke Tests: Añadir a la matriz de pruebas
Opcional (calidad mejorada):
- Perfiles de presentador/audiencia por estilo
- Plantillas de prompts localizadas
- Instrucciones de voz por estilo
Este checklist garantiza que no se pierda nada. Claude Code lo sigue sistemáticamente.
3. El Playbook del Backend
Documenta exactamente cómo la generación de podcasts maneja el idioma:
- Cómo la generación de esquemas usa Gemini 3 Flash con instrucciones de idioma
- Cómo la generación de diálogo usa Claude Sonnet 4.5 con contexto cultural
- Cómo la generación de voz usa Gemini TTS con orientación específica por idioma
Con estos tres documentos en su lugar, añadir un nuevo idioma se vuelve mecánico. Claude Code lee el checklist, sigue la guía de estilo y actualiza los archivos según el playbook.
---
El Problema con "Solo Tradúcelo"
Tengo que admitir que mi primer instinto fue simplemente pasar todo por una API de traducción y listo. "Create Podcast" se convierte en "Crear Podcast" y todos seguimos adelante, ¿no?
Ese enfoque produce basura. Lo aprendí de la manera difícil creciendo entre el vietnamita y el inglés — la traducción literal mata el alma de lo que intentas decir.
La traducción preserva las palabras; la localización preserva el significado. La guía de estilo codifica esta diferencia.
| Idioma | Traducción Literal | Localización Nativa |
|----------|--------------------|--------------------|
| Vietnamese | "Ý tưởng, Được Sản Xuất" | "Từ Ý Tưởng → Đến Podcast" |
| Japanese | "アイデア、制作された" | "アイデアを、カタチに" (Ideas into form) |
| Korean | "아이디어, 제작됨" | "아이디어를, 현실로" (Ideas into reality) |
| Spanish | "Ideas, Producidas" | "De la Idea, al Podcast" |
| Chinese | "想法,已制作" | "从想法,到播客" |
Cada idioma requirió este nivel de atención. Cada botón, cada mensaje de error, cada pieza de texto de marketing.
Y eso es solo la UI. La generación real de podcasts es más difícil.
---
Los Podcasts Necesitan Presentadores Nativos
Aquí hay algo que no anticipé: los nombres de los presentadores importan. Mucho.
En la versión en inglés, los presentadores por defecto se llaman Alex y Maya. Genéricos, olvidables, funciona bien.
¿Pero si estás generando un podcast en vietnamita y los presentadores siguen llamándose Alex y Maya? Suena raro. Como vietnamita, te puedo decir — suena como un mal doblaje de un programa americano :D
Así que cada idioma obtuvo nombres de presentadores nativos:
| Idioma | Presentador 1 | Presentador 2 |
|----------|--------|--------|
| English | Alex | Maya |
| Vietnamese | Minh | Lan |
| Japanese | 太郎 (Tarō) | 花子 (Hanako) |
| Korean | 민준 (Minjun) | 수진 (Sujin) |
| Spanish | Carlos | María |
| Chinese | 明辉 | 雅琴 |
Pero los nombres solos no son suficientes. La IA necesita entender el contexto cultural.
Un podcast de tecnología en Japón tiene normas conversacionales diferentes a uno en EEUU. El nivel de formalidad, la forma en que se expresa el desacuerdo, el ritmo del intercambio — todo es diferente.
Así que creé instrucciones de prompts de IA específicas por idioma. Las instrucciones en vietnamita especifican "bạn" (el "tú" informal pero respetuoso). Las instrucciones en japonés especifican la forma です/ます (cortés pero amigable). Las instrucciones en coreano especifican 합쇼체 (formal cortés).
Esto es el tipo de cosas que no puedes automatizar. Por mis años trabajando en mercados de Asia-Pacífico, conozco intuitivamente estos patrones de comunicación — el truco era codificar ese conocimiento cultural en prompts que una IA pudiera seguir. Pero una vez codificado, Claude Code los aplica consistentemente en miles de textos.
---
La Selección de Modelos de IA Que Realmente Funciona
Aquí es donde se pone interesante desde una perspectiva técnica.
DIALØGUE usa tres modelos de IA diferentes para tres tareas distintas. No porque quisiera complejidad, sino porque cada modelo es genuinamente mejor en su trabajo específico.
Tarea 1: Investigación y Esquema → Gemini 3 Flash
Cuando un usuario introduce un tema, el primer paso es la investigación. La IA necesita:
1. Buscar en la web información actual
2. Sintetizar los hallazgos en un esquema estructurado
3. Citar fuentes correctamente
Esto requiere grounding (búsqueda web en tiempo real) Y salida estructurada (cumplimiento de esquema JSON).
Aquí está el problema: la mayoría de los modelos no pueden hacer ambas cosas simultáneamente. Gemini 2.5 Flash soporta grounding. Soporta salida estructurada. Pero no juntas. Tienes que elegir una.
Gemini 3 Flash Preview es el único modelo que he encontrado que soporta ambas funciones al mismo tiempo. Así que maneja la generación de esquemas.
```python
GEMINI_MODEL = "gemini-3-flash-preview"
# Key capability:
GEMINI_MODEL_CONFIGS = \{
"gemini-3-flash-preview": {
"supports_grounding": True,
"supports_structured_output": True,
"supports_grounding_with_structured_output": True, # This is the key
\}
}
```
El esquema vuelve en unos 60 segundos con fuentes reales, correctamente estructurado.
Tarea 2: Generación de Diálogo → Claude Sonnet 4.5
Una vez que el usuario aprueba el esquema, la IA escribe el guion completo — cada palabra que dirán ambos presentadores.
Esto es escritura creativa. Necesita personalidad, ritmo natural, la sensación de una conversación real.
Lo probé con múltiples modelos. El diálogo de Claude suena consistentemente más humano. El intercambio se siente auténtico. Los presentadores se interrumpen entre sí de forma natural. Construyen sobre los puntos del otro.
Es subjetivo, pero después de generar cientos de podcasts de prueba, la diferencia es notable. Claude Sonnet 4.5 maneja la generación de diálogo.
```python
ANTHROPIC_MODEL = "claude-sonnet-4-5-20250929"
```
Tarea 3: Generación de Audio → Gemini 2.5 Flash TTS
Finalmente, el guion necesita convertirse en audio. Dos voces, ritmo adecuado, expresión emocional.
Gemini 2.5 Flash TTS ofrece 30 voces distintas con soporte multi-hablante. Puedes tener a Charon (informativo, masculino) y a Kore (firme, femenino) en el mismo archivo de audio, alternando naturalmente entre hablantes.
La calidad es suficientemente buena como para que los usuarios a menudo pregunten si son actores de voz reales.
```python
# Multi-speaker synthesis with Gemini TTS
response = client.models.generate_content(
model="gemini-2.5-flash-preview-tts",
contents=transcript,
config=types.GenerateContentConfig(
response_modalities=["AUDIO"],
speech_config=types.SpeechConfig(
multi_speaker_voice_config=types.MultiSpeakerVoiceConfig(
speaker_voice_configs=speaker_configs
)
)
)
)
```
El Pipeline
Así que el flujo completo es:
```
User Input
↓
[Gemini 3 Flash] Research + Structured Outline (~60 sec)
↓
User Review & Feedback
↓
[Claude Sonnet 4.5] Full Dialogue Script (~2-3 min)
↓
User Review & Edit
↓
[Gemini 2.5 Flash TTS] Multi-speaker Audio (~3-5 min)
↓
Finished Podcast
```
Cada modelo hace lo que mejor sabe hacer. El tiempo total de generación es de unos 8-10 minutos para un podcast de 15-30 minutos.
---
Una Funcionalidad Que Me Sorprendió
Los usuarios pidieron algo que yo no había considerado: generar podcasts en un idioma diferente al de su UI.
Un usuario vietnamita podría sentirse cómodo navegando la app en vietnamita pero querer crear un podcast en inglés para una audiencia internacional. O un profesional de marketing hispanohablante podría querer probar contenido en japonés.
Así que añadí un selector de idioma para el podcast. Tu UI puede estar en inglés mientras generas un podcast en mandarín. Los presentadores tendrán nombres chinos (明辉 y 雅琴), el diálogo seguirá los patrones conversacionales chinos y el audio usará voces apropiadas.
Es una funcionalidad pequeña, pero expande dramáticamente lo que los usuarios pueden hacer.
---
Agentes en Paralelo: El Multiplicador de Fuerza
La velocidad real vino de los agentes en paralelo. El checklist lo señala explícitamente:
> "Lanzar agentes en paralelo para archivos del backend - Los archivos del backend son más pequeños y pueden procesarse en paralelo (language_utils.py, content_moderation.py, gemini_voice_instructions.py, locales/{locale}.json)."
Cuando dije "Añade soporte para coreano," Claude Code lanzaba múltiples agentes:
- Un agente actualizando el archivo de traducción del frontend
- Otro agente añadiendo casos en coreano a `language_utils.py`
- Otro actualizando `gemini_voice_instructions.py`
- Otro añadiendo coreano a `content_moderation.py`
Todos corriendo simultáneamente. Cuando terminaban, Claude Code fusionaba los cambios y ejecutaba las pruebas.
Por eso el checklist distingue los archivos "Obligatorios" de los "Opcionales" — para que Claude Code sepa qué paralelizar versus qué puede esperar.
Para el archivo de traducción del frontend (~2.200 claves), el checklist especifica una estrategia de fragmentación:
- Fragmento 1: `common`, `nav`, `bottomNav` (~110 claves)
- Fragmento 2: `homepage`, `auth` (~180 claves)
- Fragmento 3: `dashboard`, `create` (~330 claves)
- Y así sucesivamente...
Esto previene problemas con los límites de tokens y permite a Claude Code traducir espacio de nombres por espacio de nombres, revisando cada uno contra la guía de estilo.
El alcance:
- 5 idiomas añadidos
- ~2.500 cadenas de traducción totales por idioma
- 10+ plantillas de prompts de IA por idioma
- 1 podcast demo generado por idioma
- Múltiples agentes en paralelo por idioma
La conclusión clave: no escribí código. No escribí planes. Dei dirección, revisé el output y dejé que Claude Code manejara el resto — a menudo en paralelo. Todavía me sorprende un poco :P
---
Qué Sigue
Los seis idiomas cubren unos 2 mil millones de usuarios potenciales. Eso es un alcance significativo.
Pero ya estoy pensando en lo que falta (el marketero que hay en mí nunca para):
1. Árabe - El soporte de diseño de derecha a izquierda es complejo
2. Hindi - Mercado enorme, escritura diferente
3. Portugués - Brasil es un mercado masivo de podcasts
4. Francés - Expansión europea
5. Tagalo - Fuerte comunidad creadora filipina
Cada uno requiere el mismo nivel de cuidado. Localización nativa, no traducción. Prompts culturales, no plantillas copiadas. (Esto solo fue posible porque acababa de reconstruir toda la app en 14 días con una arquitectura limpia.)
La buena noticia: los documentos de planificación son reutilizables. Añadir el próximo idioma debería ser incluso más rápido. Y la localización pasa a la app nativa para iOS que ahora estoy construyendo — los 7 idiomas, el mismo backend de Supabase.
---
Pruébalo Tú Mismo
Estoy genuinamente orgulloso de cómo resultó esto — especialmente la localización al vietnamita. Escuchar un podcast que suena como si hubiera sido creado para una audiencia vietnamita, no traducido hacia ellos, me impactó de una manera que no esperaba.
DIALØGUE ahora soporta:
- English - The original
- Vietnamese - Từ Ý Tưởng → Đến Podcast
- Japanese - アイデアを、カタチに
- Korean - 아이디어를, 현실로
- Spanish - De la Idea, al Podcast
- Chinese - 从想法,到播客
Crea un podcast en tu idioma →
La UI seguirá tu preferencia elegida. Y recuerda — puedes generar podcasts en cualquiera de estos idiomas independientemente de la configuración de tu UI.
Los nuevos usuarios reciben 2 podcasts gratuitos para probarlo.
---
Las Conclusiones
Mirando hacia atrás en todo esto, lo que más me sorprendió fue cuánto importó mi experiencia en publicidad. Años adaptando campañas en mercados asiáticos me enseñaron que la localización nunca se trata solo de palabras — se trata de intuición cultural. No esperaba que esa fuera la habilidad más valiosa que aportaría a un proyecto de programación con IA.
Para los que construyen con asistentes de programación de IA:
1. Dirige, no escribas. No escribí los documentos de planificación — describí lo que quería y Claude Code los produjo. Luego siguió sus propios planes. Esto se sintió raro al principio, como delegar a alguien que también escribe su propio brief. Pero funciona.
2. La estructura habilita la escala. Guías de estilo, checklists, playbooks — estos no son solo para humanos. Creo que este es el mayor desbloqueo: estructura tus requisitos para que un agente de IA pueda ejecutar sistemáticamente. (Mis años escribiendo briefs de marketing por fin dieron frutos de una manera inesperada.)
3. Adapta el modelo a la tarea. Puede que me equivoque, pero creo que ningún modelo es aún el mejor en todo. Para DIALØGUE:
- Gemini 3 Flash para investigación fundamentada y estructurada
- Claude Sonnet 4.5 para diálogo natural
- Gemini 2.5 Flash TTS para audio multi-hablante
4. Localiza, no traduzcas. Tus usuarios notan la diferencia. No puedo enfatizar esto suficiente — como alguien que ha vivido en tres países y trabajado en más de una docena de mercados, he visto lo que la traducción perezosa le hace a un producto. Codifica el conocimiento cultural en tus prompts y deja que la IA lo aplique consistentemente.
Eso es todo de mi parte en esto. Si estás construyendo algo multilingüe — o incluso pensándolo — me encantaría saber cómo estás abordando la localización. ¿Estás usando IA para ello? ¿Siguiendo la ruta tradicional de agencia? ¿Estás de acuerdo en que el contexto cultural es la parte difícil, no la traducción en sí? Cuéntame.
Un abrazo,
Chandler





