如何解决如何在芹菜中使用flask babel gettext?
我有一个flask-celery 设置,用flask babel 翻译我的文本。我无法在 celery 任务中翻译。我相信这是因为它不知道当前的语言(即使知道我也不知道),这是因为 celery 无法访问请求上下文(据我所知)......>
能够翻译的解决方案是什么?
解决方法
您正确地指出 celery 无法访问请求上下文的问题,这意味着 flask_babelex.get_locale 返回 None。您可以使用 Flask-Babel 中提供的 force_locale 上下文管理器,它提供虚拟请求上下文。
from contextlib import contextmanager
from flask import current_app
from babel import Locale
from ..config import SERVER_NAME,PREFERRED_URL_SCHEME
@contextmanager
def force_locale(locale=None):
if not locale:
yield
return
env = {
'wsgi.url_scheme': PREFERRED_URL_SCHEME,'SERVER_NAME': SERVER_NAME,'SERVER_PORT': '','REQUEST_METHOD': ''
}
with current_app.request_context(env) as ctx:
ctx.babel_locale = Locale.parse(locale)
yield
芹菜任务示例
@celery.task()
def some_task(user_id):
user = User.objects.get(id=user_id)
with force_locale(user.locale):
...gettext('TranslationKey')...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。