[英]Flask-Babel working in development but not translating in production
我已經在我的本地主機開發應用程序(使用兩種語言: en_GB
和en_US
)上設置並正確運行了 Flask-Babel。
但是,當我嘗試在生產應用程序上切換語言時,它什么也沒做。 get_locale()
function 正在返回正確的語言(我可以看到它在頁面刷新時被多次調用,表明它被調用用於每個需要的翻譯),但沒有出現實際的翻譯。
正如我所說,它在開發應用程序中運行良好,我看不出任何行為在生產中應該有任何不同的原因。 任何想法將不勝感激。
翻譯文件( messages.mo
和messages.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.