@JivetH

Как передать текст из словаря так, чтобы он принимал переменные?

Пытаюсь создать мультиязычного бота в Telegram, но возникает проблема. Храню сообщения на языках в отдельном файле messages.py:
ID = {'id_RU': 'Ваш ID: {id}', 'id_EN': 'Your ID: {id}'}

Также код бота:
from telebot import *
from config import TOKEN
import messages as mes

bot = telebot.TeleBot(TOKEN, parse_mode = 'html')
bot_username = bot.get_me().username
print('START | Бот готов к работе')

@bot.message_handler(commands = ['start', 'help'])
def start(message):
lan = 'RU'
id = message.from_user.id
bot.send_message(user_id, mes.ID[f'id_{lan}'])

bot.polling(none_stop = True)

Но вместо желаемого результата
Ваш ID: цифры

Получается:
Ваш ID: {id}

Как можно исправить?
  • Вопрос задан
  • 145 просмотров
Решения вопроса 2
@alekssamos
Программист любитель
>>> ID = {'id_RU': 'Ваш ID: {id}', 'id_EN': 'Your ID: {id}'}
>>> lan = 'RU'
>>> id = 368 # message.from_user.id
>>> print(  ID[f'id_{lan}'].format(id=id) )
Ваш ID: 368
Ответ написан
Комментировать
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Вместо костылей используйте, готовые решения для перевода (Так называемые i18n).
Вариантов несколько:
  • Используйте i18n-библиотеку.
  • Используйте aiogram, там i18n есть из коробки.
  • В pytelegrambotapi тоже вроде была эта функция, но не уверен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
meidi
@meidi
Делаю тг ботов
попробуйте не id = message.from_user.id ,а id= user_id
Ответ написан
Комментировать
@dima20155
you don't choose c++. It chooses you
Вам нужно при получении /start
обновлять словарь, то есть
в свою очередь ID должен быть вида и логичнее его назвать ID_lang_message (или типо того), поскольку сами ID он никак не хранит.
ID = {'id_RU': 'Ваш ID: , 'id_EN': 'Your ID: '}
mes.ID[f'id_{lan}'] + f"{id}"

учтите, что вам необходимо хранить словарь для каждого пользователя (id, language и т.д.)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы