一旦应用程序部署在Google AppEngine上,页面将显示msgid,而不是翻译的文本。我也看不到任何错误。但是在GAE上,语言环境似乎被忽略了(参见下面调试消息中的不同输出)。
SO上的其他类似问题提到,有时是由于区分大小写的文件夹名称,或对翻译文件路径的不同引用。但我仔细检查过了。
我还可以调试什么?
babel.cfg
[python: app/**.py]
[jinja2: app/templates/**.html]
[jinja2: app/main/templates/**.html]
extensions = jinja2.ext.autoescape, jinja2.ext.with_
encoding = utf-8
config.py
"""Flask config class."""
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config(object):
"""Babel config"""
LANGUAGES = ['en','es']
BABEL_TRANSLATION_DIRECTORIES = os.path.join(basedir, 'app/translations')
init.py
from flask import Flask
from flask import request
from flask import current_app
from config import Config
from flask_babel import Babel
babel = Babel()
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
babel.init_app(app, locale_selector=get_locale)
from app.main import main_bp
app.register_blueprint(main_bp)
return app
def get_locale():
print('\n\n--> Babel debug')
print(current_app.config['LANGUAGES'])
print(babel.list_translations())
print('<-- Babel debug\n\n')
return request.accept_languages.best_match(current_app.config['LANGUAGES'])
DEV上的输出
--> Babel debug
/Users/???/???/???/???/app
/Users/???/???/???/???/app/translations
['en', 'es']
[Locale('es'), Locale('en'), Locale('en')]
<-- Babel debug
GAE上的输出
--> Babel debug
/srv/app
/srv/app/translations
['en', 'es']
[Locale('en')]
<-- Babel debug
2条答案
按热度按时间y0u0uwnf1#
只是为了将来的参考,问题是本地化文件没有上传到服务器,Babel没有给出错误或警告,在这种情况下只是默默地失败。
文件未上传的原因是Python项目的默认Github
.gitignore
文件在存储库中不包括.mo
和.pot
文件。随后,默认的.gcloudignore
合并了Github文件中的所有规则,因此从部署过程中排除了本地化文件。因此,这里的问题与Babel无关(尽管默默失败不是一个好的模式),而是与Git/Github和GAE部署默认值的组合有关。
af7jpaap2#
我确保我的
.mo
和.pot
被推,它仍然不工作。它工作得很好,但突然停止工作。我试图恢复以前的版本是工作,它不再工作.在我的本地主机上仍然工作正常