BotStrike
BotStrike
🌙
Introduction
Détection auto
Sélection manuelle
/selectyourlang
/reponse
Exemple complet
Bonnes pratiques
LocalInfo

🌍 Gestion des Langues

Rendre votre bot multilingue — détection automatique de la langue de l'utilisateur et sélection manuelle avec persistance via Properties

Introduction

BotStrike offre deux approches pour gérer la langue de vos utilisateurs :

🔍 Détection automatique

Telegram transmet la langue du client de l'utilisateur via user.language_code. Vous pouvez l'utiliser directement pour adapter vos réponses sans rien demander à l'utilisateur.

🎯 Sélection manuelle

L'utilisateur choisit sa langue via des boutons inline. La préférence est sauvegardée avec User.setProp / bot.setUserProp et utilisée pour toutes les commandes suivantes.

💡 Recommandation — Combinez les deux ! Utilisez la détection automatique comme valeur par défaut, et proposez une commande de sélection manuelle pour les cas où la détection est incorrecte.

Détection automatique

Chaque utilisateur Telegram a un language_code (ex : "fr", "en", "ru", "es"). BotStrike le rend accessible directement dans le contexte utilisateur.

⚡ JavaScript
🐍 Python

Accéder à la langue

const lang = user.language_code; // "fr", "en", "ru", "es", etc.

if (lang === "fr") {
  Bot.sendMessage("Bonjour ! 🇫🇷");
} else if (lang === "ru") {
  Bot.sendMessage("Привет! 🇷🇺");
} else if (lang === "es") {
  Bot.sendMessage("¡Hola! 🇪🇸");
} else {
  Bot.sendMessage("Hello! 🇬🇧");
}

Avec un objet de traductions

const messages = {
  fr: "Bienvenue dans notre bot ! 🎉",
  en: "Welcome to our bot! 🎉",
  ru: "Добро пожаловать в нашего бота! 🎉",
  es: "¡Bienvenido a nuestro bot! 🎉"
};

const lang = user.language_code || "en";
const key = lang.substring(0, 2); // "fr-FR" → "fr"
Bot.sendMessage(messages[key] || messages.en);

Accéder à la langue

lang = user.get("language_code", "en")  # "fr", "en", "ru", etc.

if lang == "fr":
    bot.sendMessage("Bonjour ! 🇫🇷")
elif lang == "ru":
    bot.sendMessage("Привет! 🇷🇺")
elif lang == "es":
    bot.sendMessage("¡Hola! 🇪🇸")
else:
    bot.sendMessage("Hello! 🇬🇧")

Avec un dictionnaire de traductions

messages = {
    "fr": "Bienvenue dans notre bot ! 🎉",
    "en": "Welcome to our bot! 🎉",
    "ru": "Добро пожаловать в нашего бота! 🎉",
    "es": "¡Bienvenido a nuestro bot! 🎉"
}

lang = user.get("language_code", "en")
key = lang[:2]  # "fr-FR" → "fr"
bot.sendMessage(messages.get(key, messages["en"]))
⚠️ Limites de la détection automatique — Le language_code reflète la langue de l'application Telegram, pas forcément la langue parlée par l'utilisateur. Un francophone peut avoir Telegram en anglais.

Sélection manuelle avec Properties

Pour une gestion fiable, proposez un menu de sélection de langue avec des boutons inline. La préférence est stockée dans les User Properties et reste accessible dans toutes les commandes.

📋 Flux en deux commandes

  1. /selectyourlang — Affiche les drapeaux en boutons inline
  2. /reponse — Reçoit le callback, extrait la langue, la sauvegarde avec setProp

Le nom du callback contient le suffixe de langue (ex : /reponse fr, /reponse ru). La commande /reponse récupère ce suffixe et le stocke.

💡 Astuce — Après la sélection, supprimez l'ancien message avec Bot.deleteMessage() / bot.deleteMessage() pour garder le chat propre, puis envoyez une confirmation dans la langue choisie.

Commande /selectyourlang

Cette commande affiche un message avec 4 boutons de langue. Chaque bouton déclenche un callback vers la commande /reponse avec le code langue en suffixe.

⚡ JavaScript
🐍 Python
// Commande : /selectyourlang
Bot.sendMessage("🌍 Choisissez votre langue / Choose your language:", {
  keyboard: [
    [
      { text: "🇫🇷 Français", callback: "/reponse fr" },
      { text: "🇷🇺 Русский",  callback: "/reponse ru" }
    ],
    [
      { text: "🇬🇧 English",  callback: "/reponse en" },
      { text: "🇪🇸 Español",  callback: "/reponse es" }
    ]
  ]
});
# Commande : /selectyourlang
bot.sendMessage("🌍 Choisissez votre langue / Choose your language:", {
    "keyboard": [
        [
            {"text": "🇫🇷 Français", "callback": "/reponse fr"},
            {"text": "🇷🇺 Русский",  "callback": "/reponse ru"}
        ],
        [
            {"text": "🇬🇧 English",  "callback": "/reponse en"},
            {"text": "🇪🇸 Español",  "callback": "/reponse es"}
        ]
    ]
})
💡 Comment ça marche — Quand l'utilisateur clique sur « 🇫🇷 Français », BotStrike exécute la commande /reponse avec le paramètre "fr". Le suffixe est accessible via user.callback_suffix (JS) ou user.get("callback_suffix") (Python).

Commande /reponse

Cette commande reçoit le callback, extrait la langue choisie, la sauvegarde dans les User Properties, supprime le message de sélection et envoie une confirmation.

⚡ JavaScript
🐍 Python
// Commande : /reponse
// Récupère le suffixe du callback (ex: "fr", "ru", "en, "es")
const lang = user.callback_suffix;

if (!lang) return;

// Sauvegarder la langue choisie dans les User Properties
User.setProp("lang", lang);

// Supprimer le message avec les boutons
Bot.deleteMessage(user.message_id);

// Messages de confirmation par langue
const confirmations = {
  fr: "✅ Langue définie : Français 🇫🇷",
  ru: "✅ Язык установлен: Русский 🇷🇺",
  en: "✅ Language set: English 🇬🇧",
  es: "✅ Idioma seleccionado: Español 🇪🇸"
};

Bot.sendMessage(confirmations[lang] || confirmations.en);
# Commande : /reponse
# Récupère le suffixe du callback (ex: "fr", "ru", "en", "es")
lang = user.get("callback_suffix", "")

if not lang:
    return

# Sauvegarder la langue choisie dans les User Properties
bot.setUserProp("lang", lang)

# Supprimer le message avec les boutons
bot.deleteMessage(user.get("message_id"))

# Messages de confirmation par langue
confirmations = {
    "fr": "✅ Langue définie : Français 🇫🇷",
    "ru": "✅ Язык установлен: Русский 🇷🇺",
    "en": "✅ Language set: English 🇬🇧",
    "es": "✅ Idioma seleccionado: Español 🇪🇸"
}

bot.sendMessage(confirmations.get(lang, confirmations["en"]))

Exemple complet — Bot multilingue

Voici un exemple de commande /start qui utilise la langue sauvegardée (si elle existe) ou la détection automatique comme fallback.

⚡ JavaScript
🐍 Python
// Commande : /start
// 1. Vérifier si l'utilisateur a déjà choisi une langue manuellement
let lang = User.getProp("lang");

// 2. Sinon, utiliser la détection automatique de Telegram
if (!lang) {
  lang = (user.language_code || "en").substring(0, 2);
}

// 3. Définir les traductions
const texts = {
  fr: {
    welcome: "👋 Bienvenue ! Je suis votre assistant.",
    help: "Tapez /help pour voir les commandes.",
    lang_btn: "🌍 Changer de langue"
  },
  ru: {
    welcome: "👋 Добро пожаловать! Я ваш помощник.",
    help: "Введите /help для списка команд.",
    lang_btn: "🌍 Изменить язык"
  },
  en: {
    welcome: "👋 Welcome! I'm your assistant.",
    help: "Type /help to see commands.",
    lang_btn: "🌍 Change language"
  },
  es: {
    welcome: "👋 ¡Bienvenido! Soy tu asistente.",
    help: "Escribe /help para ver los comandos.",
    lang_btn: "🌍 Cambiar idioma"
  }
};

const t = texts[lang] || texts.en;

Bot.sendMessage(t.welcome + "\n" + t.help, {
  keyboard: [
    [{ text: t.lang_btn, callback: "/selectyourlang" }]
  ]
});
# Commande : /start
# 1. Vérifier si l'utilisateur a déjà choisi une langue
lang = bot.getUserProp("lang")

# 2. Sinon, utiliser la détection automatique de Telegram
if not lang:
    lang = user.get("language_code", "en")[:2]

# 3. Définir les traductions
texts = {
    "fr": {
        "welcome": "👋 Bienvenue ! Je suis votre assistant.",
        "help": "Tapez /help pour voir les commandes.",
        "lang_btn": "🌍 Changer de langue"
    },
    "ru": {
        "welcome": "👋 Добро пожаловать! Я ваш помощник.",
        "help": "Введите /help для списка команд.",
        "lang_btn": "🌍 Изменить язык"
    },
    "en": {
        "welcome": "👋 Welcome! I'm your assistant.",
        "help": "Type /help to see commands.",
        "lang_btn": "🌍 Change language"
    },
    "es": {
        "welcome": "👋 ¡Bienvenido! Soy tu asistente.",
        "help": "Escribe /help para ver los comandos.",
        "lang_btn": "🌍 Cambiar idioma"
    }
}

t = texts.get(lang, texts["en"])

bot.sendMessage(t["welcome"] + "\n" + t["help"], {
    "keyboard": [
        [{"text": t["lang_btn"], "callback": "/selectyourlang"}]
    ]
})

Bonnes pratiques

📝 Organisation des traductions

  • Centralisez vos textes dans un objet/dictionnaire en haut de chaque commande
  • Utilisez des clés cohérentes (welcome, help, error, etc.)
  • Prévoyez toujours un fallback vers l'anglais (texts[lang] || texts.en)

🔄 Priorité de détection

  1. User Property — Langue choisie manuellement (priorité haute)
  2. language_code — Langue détectée automatiquement (fallback)
  3. Valeur par défaut — Anglais si rien n'est disponible

⚡ Performance

  • User.getProp("lang") est rapide — pas d'hésitation à l'appeler dans chaque commande
  • Évitez les fichiers de traduction volumineux — gardez les textes dans le code de chaque commande
  • Pour les bots avec 10+ langues, utilisez une Bot Property contenant un objet JSON de traductions globales
✅ Récapitulatif — user.language_code pour la détection automatique, User.setProp("lang", ...) / bot.setUserProp("lang", ...) pour la sauvegarde manuelle, et un fallback anglais systématique.

🌍 Détection réelle (pays + fuseau horaire)

Pour aller plus loin que language_code (qui peut être en partout dans le monde), la lib LocalInfo détecte le pays réel, l'heure locale et le fuseau horaire de l'utilisateur via un widget Telegram.

📦 Activation — Bibliothèques → LocalInfo-Get → Installer.

Étape 1 — Demander la détection

# Python
url = Bs.localInfoUrl(user["id"], "/got_local")
Bot.sendButtons("📝 Cliquez pour confirmer votre langue :", [
    {"text": "🌍 Détecter ma langue", "url": url}
])

Étape 2 — Récupérer les infos (commande /got_local)

info = Bs.localInfo(user["id"])
# info = {
#   "pays": "France", "country": "France",
#   "heure": "14:30:25", "time12": "2:30 PM", "time24": "14:30",
#   "date": "06/05/2026", "dateISO": "2026-05-06",
#   "timezone": "Europe/Paris"
# }

# Mapper pays → langue
pays_to_lang = {"France": "fr", "España": "es", "Deutschland": "de", "Italia": "it"}
lang = pays_to_lang.get(info["pays"], "en")
User.setProp("lang", lang)
User.setProp("timezone", info["timezone"])

Bot.sendMessage(f"✅ Détecté : {info['pays']} ({lang}) — il est {info['heure']}")

JavaScript équivalent

let url = Bs.localInfoUrl(user.id, "/got_local");
Bot.sendButtons("📝 Confirmez votre langue :", [
    { text: "🌍 Détecter", url: url }
]);

// /got_local.js
let info = Bs.localInfo(user.id);
let lang = ({ "France": "fr", "España": "es" })[info.pays] || "en";
User.setProp("lang", lang);
User.setProp("timezone", info.timezone);
Bot.sendMessage(`✅ ${info.pays} (${lang}) — il est ${info.heure}`);