Ich benutze Python gettext um meine Telegramm Bot-Nachrichten zu pt_BR zu übersetzen oder sie in en_US zu lassen. Dies ist mein Code:Python - Internationalisierung für Telegram-Bots
# Config the translations
lang_pt = gettext.translation("pt_BR", localedir="locale", languages=["pt_BR"])
def _(msg): return msg
# Connecting to Redis db
db = redis.StrictRedis(host="localhost", port=6379, db=0)
def user_language(func):
@wraps(func)
def wrapped(bot, update, *args, **kwargs):
lang = db.get(str(update.message.chat_id))
if lang == b"pt_BR":
# If language is pt_BR, translates
_ = lang_pt.gettext
else:
# If not, leaves as en_US
def _(msg): return msg
result = func(bot, update, *args, **kwargs)
return result
return wrapped
@user_language
def unknown(bot, update):
"""
Placeholder command when the user sends an unknown command.
"""
msg = _("Sorry, I don't know what you're asking for.")
bot.send_message(chat_id=update.message.chat_id,
text=msg)
Aber selbst wenn die Sprache pt_BR, der Text als en_US bleibt. Es scheint, dass die erste Erklärung der Funktion _()
(Zeile 3), alle Nachrichten auf einmal übersetzt, und selbst wenn die _()
Funktion im Dekorateur ändert, wird die Nachricht nicht ein weiteres Mal übersetzt.
Wie kann ich erzwingen, dass die Nachrichten im Dekorateur erneut übersetzt werden?
Danke für Jannes Hoke aus der Telegramm.Bot() Gruppe (@pythontelegrambotgroup) im Telegramm! –