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