heroku Flask-Babel正在开发中,但未在生产中进行翻译

jmp7cifd  于 2023-01-30  发布在  Babel
关注(0)|答案(2)|浏览(159)

我已经设置好Flask-Babel并在我的localhost开发应用程序上正常工作(有两种语言:en_GBen_US)。
然而,当我尝试在生产应用程序上切换语言时,它什么也不做。get_locale()函数正在返回正确的语言(我可以看到它在页面刷新时被多次调用,这表明它在为每个所需的翻译调用),但没有实际的翻译出现。
正如我所说的,它在开发应用程序中工作得很完美,我看不出有什么理由在生产中会有什么不同。任何想法都将不胜感激。
翻译文件(messages.momessages.po)存储在translations/en_us/LC_MESSAGES中。

配置py

LANGUAGES = ['en_GB', 'en_US']

巴伯尔.cfg

[jinja2: megaseatingplan/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_

初始化.py

# Initialise flask-babel
babel = Babel(app)

@babel.localeselector
def get_locale():
    try:
        print("Language loaded from current_user: "+str(current_user.language))
        return current_user.language
    except:
        print("Language loaded from browser: "+str(request.accept_languages.best_match(app.config['LANGUAGES'])))
        return request.accept_languages.best_match(app.config['LANGUAGES'])

手动选择语言功能

@app.route('/switch_language/<language>')
@login_required
def switch_language(language):
    current_user.language = language
    db.session.commit()

    track_event("User", "Switch language", label=language, value=0, userid=current_user.userid)

    if language == "en_GB":
        flash("Language switched to English (UK)")
    elif language == "en_US":
        flash("Language switched to English (US)")

    return redirect(url_for('home'))

**编辑:**一些额外的信息。我已经确认BABEL_TRANSLATION_DIRECTORIES指向正确的位置,并使用list_translations()确认它正在查找我的en_US翻译文件。

jdgnovmf

jdgnovmf1#

我遇到了您描述的问题。对我来说,问题是BABEL_TRANSLATION_DIRECTORIES中的目录是大写字母('en ')。用小写字母('en')重命名目录解决了我的生产环境中的问题。
如果您尚未解决问题,我希望这对您有所帮助

tjrkku2a

tjrkku2a2#

我花了几年时间,但我终于弄清楚了我的问题。
翻译文件的路径是en_us/LC_MESSAGES/messages.mo,而Babel上的语言环境是en_US。在我的本地Windows开发服务器上,这不是问题,因为Windows路径不区分大小写。但是,在Heroku上的Linux上运行时,无法找到该路径(很久以前,错误消息将有助于解决此问题)。
从远程存储库中删除该文件夹并将其重新创建为en_US/LC_MESSAGES/messages.mo后,问题得到解决。

相关问题