Строки внутри класса не переводятся, следующий небольшой снимок кода иллюстрирует проблему.
То, что должно произойти, это когда вы попадете в маршрут фляги, оба сообщения на английском языке.А затем нажмите обновление браузера, и оба сообщения должны быть переведены.То, что происходит, - это перевод только 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 "只是测试"