在Django中无需重启为所有进程/线程重新加载.m0文件
我们正在为翻译人员开发一个 .po 文件编辑器。翻译人员需要在实时网站上看到他们所做的更改。
我们已经成功地为当前的进程或线程重新加载了 .mo 文件,但还不能为每个进程或线程都做到这一点。
有没有可能在不影响性能的情况下实现这个功能呢?
2 个回答
2
我查看了django-rosetta,果然如我所想,他们依赖于mod_wsgi的自动重载机制。这正是我会建议的做法。想了解更多细节,可以阅读重载源代码。
6
我们也遇到了同样的问题。用户必须直接在网站上写翻译。我找到了一种适用于django 1.1的中间件,它可以清除翻译缓存,并尝试在django 1.4的视图中使用。
- 用户提交带翻译的表单
- 方法解析表单数据并修改*.po文件
- -subprocess.Popen(["python", "manage.py", "compilemessages"], stderr=PIPE, stdout=PIPE)(用于编译修改后的*.po文件)
下面的函数用于清除缓存
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