Saltar al contenido principal
Nivel: Intermedio · Etiquetas: WhatsApp, Telegram, i18n Funcionalidades: locales y ctx.t() · resolución del idioma y detect · ctx.setLang() · formas de plural · textos integrados traducidos · hooks before · conversaciones async

Requisitos

  • Node.js 22.12 o superior y una carpeta vacía con "type": "module" en su package.json (Inicio rápido).

El bot completo

Cómo funciona

  1. Árboles de mensajes. bot.locale(código, mensajes) registra un árbol por idioma. Las claves se anidan (ctx.t('order.size')) y los marcadores {name} se rellenan con el segundo argumento. En un bot más grande, guarda cada árbol en su archivo e impórtalo: import es from './locales/es.json' with { type: 'json' }.
  2. Qué idioma. En cada mensaje el bot elige el primer idioma que atiende entre: la elección guardada del usuario, el idioma que informa su cliente (Telegram lo envía, WhatsApp no), tu función detect y por último defaultLocale. locales: ['es', 'en'] lo limita a los idiomas que has traducido. ctx.langSource dice cuál ganó.
  3. Recordar lo detectado. detect solo mira el mensaje actual, así que el hook before('message') guarda el idioma detectado con ctx.setLang(). Los mensajes siguientes lo mantienen, también los que detect no reconoce (/cancel y 1 en la transcripción).
  4. Cambiar. /lang en llama a ctx.setLang('en'), que se guarda en el perfil del usuario (ctx.user) con la clave lang.
  5. Conversaciones. c.t() traduce con el idioma del último mensaje, así que las etiquetas del menú salen del mismo árbol. El .choose() del DSL recibe etiquetas fijas; cuando el menú debe traducirse, constrúyelo con c.choose() en una conversación.
  6. Plurales. cups tiene las formas zero, one y other; count elige una con Intl.PluralRules.
Los textos que escribe el framework por ti (/help, /cancel, timeouts, mensajes de reintento) vienen en español e inglés y también siguen a ctx.lang: compara /cancel en la transcripción.

Pruébalo

Ejecútalo en WhatsApp o Telegram

node bot.js muestra un código QR: escanéalo desde WhatsApp → Dispositivos vinculados. En Telegram, instala @botmesh/telegram y cambia el provider como en O conectar Telegram: el bot también lee el idioma de la app de Telegram de cada usuario, antes de detect.

Siguientes pasos