2016-06-22 3 views
1

Я интернационализировал веб-сайт, и переводы работают с помощью одного и того же URL-адреса с префиксом другого языка i.e./en/home и/de/home с соответствующим языком.Интернационализация Django не перенаправляется корректно при переключении языка?

Однако при переключении языков с использованием Django built-in view setlang я всегда получаю URL-адрес перенаправления без каких-либо изменений в префиксе языка, т. Е. В/ru/home, и переключение на немецкий язык должно быть перенаправлено на/de/home /, но вместо этого я получаю/en/home

Выполнение некоторой отладки и прошивка внутри Django, я обнаружил, что функция с именем translate_url() неверно возвращает правильный URL-адрес. К сожалению, глубже становится немного волосатым для меня, и я отрываю свои волосы. Нажав на имя функции выше, вы получите точную строку, дающую мне проблемы.

Кто-нибудь знает, что может быть неправильным?

urls.py:

urlpatterns = [ 
    url(r'^i18n/', include('django.conf.urls.i18n')), 
    url(r'^admin/', admin.site.urls), 
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

urlpatterns += i18n_patterns(
    url(r'^', include('website.urls')), 
) 

сайт/urls.py:

urlpatterns = [ 
    url(r'^contact/$', 
     ContactFormView.as_view(form_class=CustomContactForm), 
     name='contact_form'), 
    url(r'^contact/sent/$', 
     TemplateView.as_view(
      template_name='contact_form/contact_form_sent.html'), 
     name='contact_form_sent'), 
    url(r'^$', TemplateView.as_view(template_name="website/home.html")), 
] 

шаблон:

{% load staticfiles %} 
{% load i18n %} 
{% load website_tags %} 
{% get_current_language as LANGUAGE_CODE %} 
{% get_available_languages as LANGUAGES_AVAILABLE %} 

      <form action="{% url 'set_language' %}" method="post"> 
       <div class="language_choice"> 
        <label for="language">Language</label> 
        <div class="lang_drp"> 
         {% csrf_token %} 
         <select name="language" id="language"> 
          {% for code, name in LANGUAGES_AVAILABLE %} 
          <option value="{{ code }}" {% if code == LANGUAGE_CODE %}selected{% endif %}>{{ name }}</option> 
          {% endfor %} 
         </select> 
        </div> 
       </div> 
      </form> 

settings.py:

# MIDDLEWARE CONFIGURATION 
# ----------------------------------------------------------------------------- 
MIDDLEWARE_CLASSES = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
] 

# TEMPLATE CONFIGURATION 
# ----------------------------------------------------------------------------- 
TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [ 
      os.path.join(APPS_DIR, 'templates') 
     ], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
       'django.template.context_processors.i18n', 
      ], 
     }, 
    }, 
] 

# LANGUAGE CONFIGURATION 
# ----------------------------------------------------------------------------- 
# https://docs.djangoproject.com/en/dev/topics/i18n/ 
USE_I18N = True 

# See: https://docs.djangoproject.com/en/dev/ref/settings/#use-l10n 
USE_L10N = True 

# See: https://docs.djangoproject.com/en/dev/ref/settings/#language-code 
LANGUAGE_CODE = 'de' 

# Language name string is always native, that is to ensure that if reader don't 
# understand the current language displayed, the user would still be able to 
# recognize the native name of their language. 
LANGUAGES = [ 
    ('en', 'English'), 
    ('de', 'Deutsch'), 
] 

LOCALE_PATHS = [ 
    os.path.join(APPS_DIR, 'locale'), 
] 

ответ

0

Так что я нашел проблему. По-видимому, вы ДОЛЖНЫ включать следующее поле параметра/ввода, которое соответствует текущему пути (без префикса языка), чтобы перенаправление работало.

Я ошибочно предположил, что это было автоматически выяснено Django.