2016-08-05 24 views
1

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?

Antwort

0

Gelöst!

Ich habe gerade vergessen, die _() als global zu erklären. Hier ist der richtige Code:

+0

Danke für Jannes Hoke aus der Telegramm.Bot() Gruppe (@pythontelegrambotgroup) im Telegramm! –