Django i18n: как не переводить сайт администратора?
У меня есть приложение на нескольких языках, но я хочу, чтобы keepthe admin site всегда был на английском языке.
Каков наилучший способ сделать это?
Спасибо заранее.
Ответы
Ответ 1
Рассмотрим использование промежуточного программного обеспечения, которое переопределяет языковой стандарт для определенных 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)
Это всего лишь идея реализации.
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)
Как подать заявку?
Сохранить в 'middleware.py' и включить в MIDDLEWARE_CLASSES (1.9 и ранее) или MIDDLEWARE (1.10+) в файле настроек.
Ответ 2
Я бы установил два файла настроек:
-
settings.py
для всего проекта
-
admin_settings.py
только для администратора
Затем размещайте этот проект в отдельных доменах:
-
example.com
-
admin.example.com
Если у вас есть отдельные файлы настроек для администратора и остальной части проекта, вы можете переопределить языковые настройки в admin_settings.py
У вас, вероятно, будут очень похожие файлы настроек, поэтому следующая строка в верхней части admin_settings.py
будет удобной:
from my_project.settings import *
Ответ 3
Это интересная проблема, и я не мог найти простой ответ в прямом направлении, поэтому похоже, что для этого потребуется решение из коробки. Вот две идеи.
-
Это может быть грубый способ сделать это, но попытались ли вы удалить все языковые пакеты в django.contrib.admin.locale, за исключением en? Я не пробовал это сам, но я думаю, что django по умолчанию вернется на английский, если это единственный язык, который нужно отобразить. Он может просто в конечном итоге использовать базовые локальные файлы django, если он не может его найти, но стоит попробовать.
-
Единственным другим вариантом, о котором я мог подумать, было изменение домашней страницы администратора на пользовательский вид, где вы вручную устанавливали переменную django_language в сеансе или cookie на английский, а затем перенаправляли на обычную страницу администратора.
Смотрите эти ссылки для некоторых идей.
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