Django: i18n - changer la langue
Je suis installer model_translation, rosetta, locale_url. Mais ne travaille pas changer de langue.
Mon settings.py:
LANGUAGE_CODE = 'ru'
MODELTRANSLATION_TRANSLATION_REGISTRY = "project.translation"
TRANSLATION_REGISTRY = "project.translation"
ugettext = lambda s: s
LANGUAGES = (
('ru', ugettext(u'Russian')),
('uk', ugettext(u'Ukrainian')),
)
Mon avis pour un changement de langue:
def set_language(request):
next = request.REQUEST.get('next', None)
if not next:
next = request.META.get('HTTP_REFERER', None)
if not next:
next = '/'
response = http.HttpResponseRedirect(next)
if request.method == 'GET':
lang_code = request.GET.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
Dans les modèles:
<a href="{% url set_lang %}?lang=uk&next={{request.path}}">Ukranian</a>
Mon middleware:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.locale.LocaleMiddleware',
'localeurl.middleware.LocaleURLMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
Mais le changement de langue ne fonctionne pas. Si je me tourne sur le lien http://localhost/uk/ de changement de langue, mais lorsque vous passez à une autre page - la langue la langue par défaut.
Que dois-je faire?
source d'informationauteur Taras
Vous devez vous connecter pour publier un commentaire.
ajouter une traduction.activer votre code:
J'ai connu le même problème et c'était à cause de la
next
paramètre est précédé de l'ancien code de langue et cela empêche la nouvelle à prendre effet. (Merci à @Pedro de réponse pour donner un indice sur cette).Pour résoudre ce problème, si vous utilisez
{{ request.path }}
ou{{ request.get_full_path }}
à partir de votre modèle (ou ne pas le mettre du tout) pour rediriger vers le même traduites, alors vous devez spécifier le lendemain, découper le code de langue de la façon suivante. Le reste reste la les docs disent:J'ai posté un réponse expliquer cela plus en détail et fournissant des deux fonctionnelles des exemples.
En utilisant le code posté par Torsten, votre URL ne change pas parce que 'suivant' sera toujours quelque chose comme */ru/*autres/url. Il ne sera jamais Rien (en fait les deux si la ci-dessus sont inutiles). Votre langue changements en raison de la
set_cookie
ettranslation.activate
. Mais lorsque vous cliquez sur un autre lien dans votre site en anglais, la langue va revenir à ru.Vous pouvez essayer le
set_language
builtin vue de django, comme expliqué iciou le processus de la "prochaine des" cordes à essayer quelques-uns de remplacer ou quelque chose comme ça.Vous pouvez essayer cette . ce code fonctionne avec demande d'obtenir
ou vous pouvez utiliser construits option de langue . cela fonctionne avec une requête POST
https://docs.djangoproject.com/en/dev/topics/i18n/translation/#django.views.i18n.set_language