this method should set language language code:
def set_language(request): if request.method == 'post': response = httpresponseredirect(reverse('root')) lang_code = request.post.get('language', none) if lang_code , 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')
the following form in html change_language.html
<form action="{% url 'profile:language' %}" method="post"> {% get_current_language language_code %} <label for="new_lang">{% trans "choose 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>
in settings.py have following relevant settings:
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'), )
when start website, language german (i in germany). when go change_language page , try set language german english, won't change anything. there maybe forgot?
you need activate language first. need is:
from django.utils import translation django.shortcuts import redirect 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')
Comments
Post a Comment