Django i18n: как не переводить админ сайта? - PullRequest
16 голосов
/ 30 марта 2010

У меня есть приложение на нескольких языках, но я бы хотел, чтобы сайт администратора всегда был на английском. Каков наилучший способ сделать это?

Заранее спасибо.

Ответы [ 3 ]

13 голосов
/ 30 января 2011

Рассмотрите возможность использования промежуточного программного обеспечения, которое переопределяет локаль для определенных URL-адресов. Вот грубый пример:

Джанго 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)

Это просто идея реализации.

Джанго 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+).

4 голосов
/ 02 февраля 2011

Я бы настроил два файла настроек:

  1. settings.py для всего проекта
  2. admin_settings.py только для администратора

Затем разместите этот проект в отдельных доменах:

  1. example.com
  2. admin.example.com

Если у вас есть отдельные файлы настроек для администратора и остальной части проекта, вы можете переопределить языковые настройки в вашем admin_settings.py

Вероятно, у вас будут очень похожие файлы настроек, поэтому удобной будет следующая строка в верхней части admin_settings.py:

from my_project.settings import *
0 голосов
/ 30 января 2011

Это интересная проблема, и я не смог найти простой прямой ответ, так что, похоже, он потребует нестандартного решения. Вот две идеи.

  1. Это может быть грубый способ сделать это, но вы пытались удалить все языковые пакеты в django.contrib.admin.locale, кроме en? Я не пробовал сам, но я думаю, что django по умолчанию вернется на английский, если это единственная локаль, оставшаяся для отображения. Он может просто использовать базовые файлы локали django, если не может найти его, но стоит попробовать.

  2. Единственный другой вариант, о котором я мог подумать, - это изменить домашнюю страницу администратора на пользовательское представление, где вы вручную устанавливаете переменную 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

...