2013-11-28 48 views
3

里面我有发送电子邮件异步电子邮件尚未翻译的芹菜任务

from djcelery.common import respects_language 

@task(ignore_result=True) 
@respects_language 
def async_send_activation_email(registration_profile): 
    registration_profile.send_activation_email() 

而且

from django.core import context_processors 

def send_activation_email(self): 

    variables = { 
        'some_variable':'something', 
     } 
    context = context_processors.i18n(None) # Allows to easily get all the language information into context. None is passed as the request does not matter for this context_processor. 


    # Subject 
    # Email subject *must not* contain newlines 
    subject = render_to_string(
     'user_manager/activation/email_subject.txt', 
     variables, 
     context 
     ) 
      ... 

上下文包含正确的信息发送激活邮件功能的芹菜任务(在我的情况LANGUAGE ='fr'和其他语言选项)。这是正常的,因为它们是由@respects_language装饰者正确设置的。

但render_to_string无论如何都使用备用语言。

有关可能发生什么的任何想法?

+0

您是否尝试过使用不同于render_to_string的语言?就像打印一条消息或类似的东西来测试它是否存在。另一件事可能是djcelery没有正确的locale路径设置... –

+0

没有简单的ugettext或ugettext_lazy也无法正常工作。我将查看区域路径问题 – Laucia

+0

就是这样! 非常感谢 – Laucia

回答

5

尝试使用

from django.utils import translation 
translation.activate('fr') 

编辑

从意见解决方案的问题:

检查,当他们在芹菜执行您的语言环境路径,它们可能会有所不同。

+1

看@respects_language是如何工作的https://github.com/celery/django-celery/blob/master/djcelery/common.py 并且已经声明'get_language'返回''fr'' – Laucia

+0

好吧,它必须是别的地方.. –