Django i18n:如何不翻译管理站点?

fil*_*ias 16 django admin internationalization django-admin

我有几种语言的应用程序,但我想保持管理网站始终用英语.做这个的最好方式是什么?

提前致谢.

Tom*_*gli 13

考虑使用覆盖某些URL的语言环境的中间件.这是一个粗略的例子:

Django 1.9及更早版本:

from django.conf import settings    
from django.utils.translation import activate     
import re

class ForceInEnglish(object):

    def process_request(self, request):   
        if re.match(".*admin/", request.path):          
            activate("en")      
        else:
            activate(settings.LANGUAGE_CODE)
Run Code Online (Sandbox Code Playgroud)

这只是一个实施的想法.

Django 1.10+:

from django.conf import settings
from django.utils import translation


class ForceInEnglish:

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.path.startswith('/admin'):
            request.LANG = 'en'
            translation.activate(request.LANG)
            request.LANGUAGE_CODE = request.LANG

        return self.get_response(request)
Run Code Online (Sandbox Code Playgroud)

如何申请?

保存到'middleware.py',并在设置文件中包含MIDDLEWARE_CLASSES(1.9及更早版本)或MIDDLEWARE(1.10+).


Ken*_*ane 0

这是一个有趣的问题,我找不到一个简单的直接答案,所以看起来它需要一个开箱即用的解决方案。这里有两个想法。

  1. 这可能是一种粗略的方法,但是您是否尝试删除 django.contrib.admin.locale 下除 en 之外的所有语言包?我自己没有尝试过,但我认为如果这是唯一要显示的语言环境,django 将默认返回英语。如果找不到它,它可能最终会使用基本的 django 语言环境文件,但值得一试。

  2. 我能想到的唯一其他选择是将管理主页更改为自定义视图,在该视图中手动将会话或 cookie 中的 django_language 变量设置为英语,然后重定向到正常的管理页面。

请参阅这些链接以获取一些想法。

http://code.djangoproject.com/browser/django/trunk/django/views/i18n.py

http://docs.djangoproject.com/en/1.2/topics/i18n/internationalization/#the-set-language-redirect-view