我有一个多语言应用程序,但我希望始终将管理员网站保持为英语。
那么最好的方法是什么?
提前感谢。
我有一个多语言应用程序,但我希望始终将管理员网站保持为英语。
那么最好的方法是什么?
提前感谢。
考虑使用中间件来覆盖某些URL的语言环境。以下是一个简单的示例:
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)
这只是一种实现的想法。
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)
保存到“middleware.py”,并在设置文件中包含到MIDDLEWARE_CLASSES(1.9及更早版本)或MIDDLEWARE(1.10+)中。
settings.py
admin_settings.py
example.com
admin.example.com
admin_settings.py
中覆盖语言设置。admin_settings.py
的顶部添加以下行将很方便。from my_project.settings import *
manage.py
和 wsgi.py
中选择设置文件(两个都要改)。 - Mark这是一个有趣的问题,我找不到一个简单明了的答案,所以看起来需要一个创新性的解决方案。以下是两个想法。
这可能是一种粗糙的方法,但您是否尝试删除 django.contrib.admin.locale 下除 en 以外的所有语言包?我自己没有尝试过,但我认为如果只剩下英语可显示,django 将默认返回英语。如果找不到它,它可能会使用基本的 django 语言环境文件,但值得一试。
我能想到的唯一其他选择是将管理主页更改为自定义视图,在其中手动设置会话或 cookie 中的 django_language 变量为英语,然后重定向到正常的管理页面。
请参阅以下链接获取一些想法。
http://code.djangoproject.com/browser/django/trunk/django/views/i18n.py
这是一个对我起作用的简单解决方案。
只需在请求中设置语言 cookie 为英语,并在 settings.py
中在 LocaleMiddleware
之前添加该中间件。
这样做的好处是无需激活和停用语言,因此不必担心会影响其他请求。
from django.conf import settings
from django.http import HttpRequest
from django.utils.deprecation import MiddlewareMixin
class ForceInEnglish(MiddlewareMixin):
def process_request(self, request: HttpRequest) -> None:
if request.path.startswith("/admin"):
request.COOKIES[settings.LANGUAGE_COOKIE_NAME] = "en"
activate(get_language())
引起的,它仅仅激活了之前激活的语言(即en
)。对我来说,使用activate(settings.LANGUAGE_CODE)
解决了这个问题。 - Tom Viner.*admin/
的 URL,即使该页面不属于管理员站点。最好以^
字符开头或使用 Python 的startswith
。 - thnee