在没有重启的情况下为django中的所有进程/线程重新加载.mo文件

时间:2009-09-08 09:17:23

标签: python django

我们正在为翻译人员编写.po文件编辑器。翻译人员需要查看他们在实时网站上所做的更改。

我们设法重新加载当前进程/线程的.mo文件。但不是每个进程/线程。

是否有可能在没有更大性能问题的情况下实现这一目标?

2 个答案:

答案 0 :(得分:3)

我们遇到了同样的问题。用户必须直接在网站上撰写翻译。我找到了django 1.1的中间件,清除了转换缓存并尝试在django 1.4中使用它。 顺序:

  1. 用户提交翻译
  2. 方法解析表单数据并更改* .po
  3. -subrocess.Popen([“python”,“manage.py”,“compilemessages”],stderr = PIPE,stdout = PIPE)(编译更改* .po)
  4. 以下功能清除缓存

    from django.utils import translation
    from django.utils.translation import trans_real, get_language
    from django.conf import settings
    import gettext
    
    if settings.USE_I18N:
    
        try:
    
            # Reset gettext.GNUTranslation cache.
            gettext._translations = {}
    
            # Reset Django by-language translation cache.
           trans_real._translations = {}
    
        # Delete Django current language translation cache.
        trans_real._default = None
    
        # Delete translation cache for the current thread,
        # and re-activate the currently selected language (if any)
        translation.activate(get_language())
    except AttributeError:
        pass
    

答案 1 :(得分:2)

我检查了django-rosetta,我怀疑他们依赖于mod_wsgi AutoReload机制。这就是我的建议。有关详细信息,请阅读Reloading Source Code