python Flask-Babel在本地显示翻译文本,但在GAE上不显示生产文本

k3fezbri  于 2023-10-14  发布在  Python
关注(0)|答案(2)|浏览(114)

一旦应用程序部署在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
y0u0uwnf

y0u0uwnf1#

只是为了将来的参考,问题是本地化文件没有上传到服务器,Babel没有给出错误或警告,在这种情况下只是默默地失败。
文件未上传的原因是Python项目的默认Github .gitignore文件在存储库中不包括.mo.pot文件。随后,默认的.gcloudignore合并了Github文件中的所有规则,因此从部署过程中排除了本地化文件。
因此,这里的问题与Babel无关(尽管默默失败不是一个好的模式),而是与Git/Github和GAE部署默认值的组合有关。

af7jpaap

af7jpaap2#

我确保我的.mo.pot被推,它仍然不工作。它工作得很好,但突然停止工作。我试图恢复以前的版本是工作,它不再工作.在我的本地主机上仍然工作正常

相关问题