2016-03-26 4 views
1

で言語を変更することはできません。このメソッドは、言語コードと言語を設定する必要がありますはジャンゴ

def set_language(request): 
    if request.method == 'POST': 
     response = HttpResponseRedirect(reverse('root')) 
     lang_code = request.POST.get('language', None) 
     if lang_code and check_for_language(lang_code): 
      if hasattr(request, 'session'): 
       request.session['django_language'] = lang_code 
      else: 
       response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code) 
     return response 
    return render(request, 'profile/change_language.html') 

次の形式をHTML change_language.html settings.pyで

<form action="{% url 'profile:language' %}" method="post"> 
      {% get_current_language as LANGUAGE_CODE %} 
       <label for="new_lang">{% trans "Choose your language:" %}</label> 
       <fieldset> 
        <input type="radio" id="de" name="language" value="de" {% if LANGUAGE_CODE == 'de' %} checked {% endif %} > 
        <label for="de">German</label> 

        <input type="radio" id="uk" name="language" value="en" {% if LANGUAGE_CODE == 'en' %} checked {% endif %} > 
        <label for="en">English</label> 
       </fieldset> 

       {{ form.newlang }} 
       <input type="submit" value="Change language"> 
       {% csrf_token %} 
</form> 

であります

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
) 


LANGUAGE_CODE = 'en' 
TIME_ZONE = 'CET' 
USE_I18N = True 
USE_L10N = True 
USE_TZ = True 

# Languages available 
LANGUAGES = (
    ('de', 'German'), 
    ('en', 'English'), 
) 

私はウェブサイトを起動すると、私の言語はドイツ語である(私はゲルマで午前:私は、次の関連する設定がありますny)。私がchange_languageページに行き、ドイツ語から英語に言語を設定しようとすると、何も変わりません。おそらく忘れてしまったことはありますか?

+0

使用しないのはなぜ[ビルトインビュー](https://docs.djangoproject.com/en/1.9/topics/i18n/translation/#the-set-language-redirect -view)? – knbk

答えて

2

言語を最初にアクティブにする必要があります。必要なのは次のとおりです。

from django.utils import translation 
from django.shortcuts import redirect 
from django.conf import settings 

def set_language(request): 
    language = request.POST.get('language', settings.LANGUAGE_CODE) 
    translation.activate(language) 
    request.session[translation.LANGUAGE_SESSION_KEY] = language 
    return redirect('root') 
+0

ありがとうございました。私は 'translation.activate(lang_code)'を自分のコードに追加しましたが、何も変更しませんでした – Goldi

+0

申し訳ありません、 'translation.LANGUAGE_SESSION_KEY'を忘れました – Goldi