Строки в классе не переводятся - PullRequest
0 голосов
/ 21 января 2019

Строки внутри класса не переводятся, следующий небольшой снимок кода иллюстрирует проблему.

То, что должно произойти, это когда вы попадете в маршрут фляги, оба сообщения на английском языке.А затем нажмите обновление браузера, и оба сообщения должны быть переведены.То, что происходит, - это перевод только msg2.

Различие между msg и msg2 заключается в том, что msg происходит из класса.

Я могу сказать из операторов печати, что после изменения языка localeselectorвызвал, и поскольку msg2 переведен, локаль установлена ​​правильно.Это почти как msg кэшируется как английский и не анализируется переводчиком, когда он в классе, как show.

Возможно, это ожидаемое ограничение?Каков предпочтительный обходной путь, если это так?

#! /usr/bin/env python
# -*- coding: utf-8 -*-
from flask import Flask, session
from flask_babel import Babel
from flask_babel import refresh
from flask_babel import gettext as _

app = Flask(__name__)
app.secret_key = "qwerty"
app.config.update(SESSION_COOKIE_NAME='mymain')
app.config['BABEL_TRANSLATION_DIRECTORIES'] = "locale"
app.config["BABEL_DEFAULT_LOCALE"] = 'en'

babel = Babel(app)


class MyClass(object):

    def __init__(self):
        self.msg = _("Now is the time")

    def text(self):
        return self.msg


myclass = MyClass()
language = "en"


@app.route('/')
def index():
    global language

    print("language - index: {}".format(language))
    msg = myclass.text()
    msg2 = _("for all good men")

    # change language
    language = 'zh_Hans'
    app.config['BABEL_DEFAULT_LOCALE'] = 'zh_Hans'
    session['language'] = 'zh_Hans'
    refresh()

    # PROBLEM: On 2nd page refresh, msg2 is translated, msg is NOT
    return 'Index Page: {} {}'.format(msg, msg2)


@babel.localeselector
def get_locale():
    print("language localeselector: {}".format(language))
    return language


class BaseConfig(object):
    SUPPORTED_LANGUAGES = ['en', 'zh_Hans']
    BABEL_DEFAULT_LOCALE = 'en'
    BABEL_DEFAULT_TIMEZONE = 'UTC'


app.config.from_object(BaseConfig)
app.run(host="0.0.0.0", port=6800, debug=False)

и файл po, который скомпилирован в файл mo.

# Chinese (Simplified) translations for PROJECT.
# Copyright (C) 2019 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2019-01-21 13:39-0500\n"
"PO-Revision-Date: 2019-01-21 13:39-0500\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: zh_Hans\n"
"Language-Team: zh_Hans <LL@li.org>\n"
"Plural-Forms: nplurals=1; plural=0\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.6.0\n"

#: main.py:20
msgid "Now is the time"
msgstr "只是测试"

#: main.py:36
msgid "for all good men"
msgstr "只是测试"
...