Decide el idioma del usuario
Las plataformas dan pistas:
- Telegram:
from.language_code(una etiqueta IETF comoesopt-br), cuando el cliente la comparte. - Discord:
localeen las interacciones (idioma del cliente) yguild_localeen servidores de comunidad. - Slack: el locale del usuario está disponible con
users.infoyinclude_locale=true. - WhatsApp y Messenger: no hay un campo fiable; deduce con cuidado por el prefijo telefónico o pregunta.
Usa la pista como valor por defecto, ofrece un comando /language y guarda la elección. Una pista no es una promesa: el idioma de la interfaz puede no ser el idioma en el que la persona quiere chatear.
Catálogos de mensajes
Mantén las cadenas fuera del código, con un ID por clave:
# es.ftl (sintaxis de Project Fluent)
items-in-cart = { $count ->
[one] Tienes un artículo en el carrito.
*[other] Tienes { $count } artículos en el carrito.
}
- Usa un formato con reglas de plural, como ICU MessageFormat o Project Fluent. Cada idioma tiene categorías distintas (por ejemplo, el árabe tiene seis y el japonés una);
Intl.PluralRuleslas expone. - Usa marcadores con nombre, no concatenación, porque el orden de las palabras cambia entre idiomas.
- Da contexto a quien traduce: dónde aparece el texto y su límite de longitud.
- Usa un idioma por defecto si falta una clave y detecta las claves ausentes en los tests.
Localiza la superficie del bot
- Telegram: llama a
setMyCommandsconlanguage_codepara cada idioma; cada persona ve el menú en el idioma de su app. El constructor de comandos genera el JSON. El nombre, la descripción y la descripción corta del bot también se pueden definir por idioma. - Discord: los comandos admiten
name_localizationsydescription_localizations. Consulta el constructor de comandos de Discord. - Botones y teclados también se traducen, y el texto debe seguir cabiendo.
Formatos
- Fechas, números y monedas: usa
Intl.DateTimeFormat,Intl.NumberFormateIntl.RelativeTimeFormat(o Babel en Python) con el locale del usuario. - Hora: guarda en UTC y muestra en la zona del usuario. Planifica horarios con el planificador de zonas horarias.
- Discord muestra las marcas
<t:UNIX:F>en la hora local de cada lector; úsalas en canales compartidos. El conversor de timestamps las crea.
Longitud y dirección
- Las traducciones suelen ser más largas que el inglés; comprueba los límites de botones, embeds y mensajes con el divisor de mensajes.
- El árabe, el hebreo y el persa se escriben de derecha a izquierda. El texto mixto con números o nombres latinos puede mostrarse desordenado; los aislantes Unicode (U+2068 y U+2069) alrededor de los valores insertados ayudan.
Bots con LLM
Indica al modelo en qué idioma responder según la preferencia guardada, no solo según el último mensaje, y evalúa la calidad por idioma: los modelos no rinden igual en todos.