15👍
Consider using middleware that overrides the locale for certain URLs. Here’s a rough example:
Django 1.9 and earlier:
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)
This is just an idea of implementation.
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)
How to apply?
Save to ‘middleware.py’, and include to MIDDLEWARE_CLASSES (1.9 and earlier) or MIDDLEWARE (1.10+) in the settings file.
4👍
I would setup two settings files:
settings.py
for whole projectadmin_settings.py
for admin only
Then host this project in separate domains:
example.com
admin.example.com
If you have separate settings files for admin and rest of the project, you can override language settings in your admin_settings.py
You will probably have very similar settings files, so following line on the top of admin_settings.py
will be handy:
from my_project.settings import *
- Selenium – python. how to capture network traffic's response
- Django ForeignKey limit_choices_to a different ForeignKey id
- How can I disable a model field in a django form
- Return list of objects as dictionary with keys as the objects id with django rest framerwork
- Can you declare multiple with variables in a django template?
0👍
This is an interesting problem, and I couldn’t find an easy strait forward answer so it looks like it will require an out of the box solution. Here are two ideas.
-
This might be a crude way of doing it, but did you try deleting all of the language bundles under django.contrib.admin.locale except for en? I haven’t tried it myself, but I think django will default back to english if that is the only locale left to display. It may just end up using the base django locale files if it can’t find it but it is worth a try.
-
The only other option that I could think of was to change the admin home page to a custom view where you manually set the django_language variable in the session or cookie to english and then redirect to the normal admin page.
See these links for some ideas.
http://code.djangoproject.com/browser/django/trunk/django/views/i18n.py
- How to write unit tests for django-rest-framework api's?
- Accessing Django OneToOneField in templates?
- Passing list of values to django view via jQuery ajax call
- How to read sql query to pandas dataframe / python / django
0👍
this is a simple solution that worked for me.
just set the language cookie in the request to English, and add that middleware in settings.py
before LocaleMiddleware
.
the upside is that there is to no need to activate and deactivate the language, so no need to worry that is will effect other requests
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"
- How to make sure Django models match the database schema
- Can you declare multiple with variables in a django template?
- Django: How to keep the test database when the test is finished?
- Learning the Django framework