簡體   English   中英

Flask-Babel 從事開發工作但不翻譯生產

[英]Flask-Babel working in development but not translating in production

我已經在我的本地主機開發應用程序(使用兩種語言: en_GBen_US )上設置並正確運行了 Flask-Babel。

但是,當我嘗試在生產應用程序上切換語言時,它什么也沒做。 get_locale() function 正在返回正確的語言(我可以看到它在頁面刷新時被多次調用,表明它被調用用於每個需要的翻譯),但沒有出現實際的翻譯。

正如我所說,它在開發應用程序中運行良好,我看不出任何行為在生產中應該有任何不同的原因。 任何想法將不勝感激。

翻譯文件( messages.momessages.po )存儲在translations/en_us/LC_MESSAGES中。

配置.py

LANGUAGES = ['en_GB', 'en_US']

babel.cfg

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

__init__.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'])

Function 手動選擇語言

@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翻譯文件。

我遇到了你描述的問題。 對我來說,問題是BABEL_TRANSLATION_DIRECTORIES中的目錄是大寫的 ('EN')。 用小寫字母 ('en') 重命名目錄解決了我的生產環境。

如果您還沒有解決問題,我希望這可以幫助您

我花了幾年時間,但我終於弄清楚了我的問題。

翻譯文件的路徑是en_us/LC_MESSAGES/messages.mo ,而 Babel 上的語言環境是en_US 在我本地的 Windows 開發服務器上,這不是問題,因為 Windows 路徑不區分大小寫。 但是,在 Heroku 上運行 Linux 時,找不到路徑(錯誤消息早就可以幫助解決這個問題)。

從遠程存儲庫中刪除文件夾並將其重新創建為en_US/LC_MESSAGES/messages.mo后,問題就解決了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM