Problem, das versucht, die Sprache von der Django-Vorlage zu ändern

7

Ich muss zwei Schaltflächen oder Links einfügen, damit Benutzer die Sprache zwischen Englisch und Spanisch ändern können. Ich habe die Dokumente gelesen und dies versucht :

%Vor%

Jedes Mal, wenn ich auf die Schaltfläche klicke, wird die Seite neu geladen, aber die Sprache ändert sich überhaupt nicht. Fehle ich etwas?

Hinweis: Ich habe next nicht eingestellt, da ich die aktuelle Seite nur in der gewünschten Sprache neu laden möchte.

Wenn ich das Standardformular verwende, das von den Dokumenten bereitgestellt wird, ist das Ergebnis dasselbe: Die Seite wird neu geladen, aber die Sprache wird nicht geändert:

%Vor%

AKTUALISIEREN :

Nach weiteren Tests habe ich festgestellt, dass es ein Problem bei der Verwendung von i18n_patterns und patterns in urls.py gibt. Derzeit habe ich eine Datei, die wie folgt aussieht:

%Vor%

Und das scheint nicht zu funktionieren. Wenn ich jedoch den i18n_patterns entferne und ihn in patterns ändere, scheint es zu funktionieren:

%Vor%

Die Dokumente sagen, dass Sie es nicht in i18n_patterns einfügen müssen, also denke ich, das sollte funktionieren, aber das tut es nicht! Es spielt keine Rolle, ob Sie django.conf.urls.i18n vor oder nach i18n_patterns einfügen, es macht immer dasselbe.

    
Caumons 22.08.2013, 23:33
quelle

4 Antworten

17

Nach weiteren Tests und dank der verwandten Frage , die von @AronYsidoro verlinkt wurde, habe ich es endlich geschafft fand das Problem und eine sehr einfache Lösung, die das tatsächlich löst.

Lassen Sie mich zunächst das Problem erklären: Wenn Sie mit i18_patterns in Ihrem urls.py den Sprachcode voranstellen, wird standardmäßig die URL aufgerufen, wenn Sie die URL set_language aufrufen, um die Sprache ohne Angabe von next zu ändern der aktuelle, aber mit dem vorangestellten alten Sprachcode! So kommt die Sprache zurück zum Original! Und wenn Sie next explizit angeben, müssen Sie sicherstellen, dass Sie den Sprachencode nicht am Anfang einfügen.

Wenn Sie {{ request.path }} oder {{ request.get_full_path }} verwenden, um next als aktuelle Seite anzugeben, funktioniert dies nicht, da auch der Sprachencode zurückgegeben wird.

Wie entfernen wir diesen unerwünschten Sprachcode, um die aktuelle Seite mit der geänderten Sprache neu zu laden, wenn i18n_patterns verwendet wird? Einfach, wir müssen nur die 3 ersten Buchstaben (den Schrägstrich und den zwei Zeichen-Sprachcode) in Scheiben schneiden!

Hier haben Sie zwei Beispiele. Die erste in Form einer Auswahl (mit den Sprachen als Auswahl) und die andere in Form einer Schaltfläche (pro Sprache).

Ich hoffe wirklich, dass dies jemand anderem hilft. Sie können den Code einfach kopieren und einfügen und es sollte funktionieren. Wenn Sie jedoch das "Knopfformular" verwenden, müssen Sie nur die gewünschte Sprache einstellen!

Sprache von Liste ändern:

%Vor%

Sprache als Schaltfläche ändern:

%Vor%     
Caumons 23.08.2013, 01:21
quelle
8

Eine Zusammenfassung der möglichen Optionen:

Ändern Sie die Sitzungssprache des Benutzers mit select

Es gibt eine ausgezeichnete ausführliche Beschreibung mit einem Beispiel zu Django-Dokumenten .

Ändern Sie die Sitzungssprache des Benutzers mit den Tasten

Es ist nicht notwendig, für jede Schaltfläche ein Formular zu wiederholen, wie von @Caumons vorgeschlagen, stattdessen können Sie einfach so viele Schaltflächen in die Form wie die Sprachen einfügen.

%Vor%

Sie können die Schaltflächen natürlich so gestalten, dass sie wie Links oder Ähnliches aussehen.

Ändern Sie die angezeigte Sprache mit Links

Wenn die standardmäßige Benutzersitzungssprache nicht geändert werden muss, können einfache Links zum Ändern des Inhalts verwendet werden:

%Vor%

SEO

Ich bin nicht ganz sicher, ob der Inhalt seo freundlich ist, wenn ein Formular verwendet wird, um die Sitzungssprache zu ändern, wie Django empfiehlt. Daher ist es möglich, dass der Link <a> Markup als versteckt unter dem Element <button> hinzugefügt wird.

    
Wtower 11.06.2015 11:33
quelle
2

Dieser Link:

Django: i18n - ändere die Sprache

kann das haben, wonach Sie suchen, wenn Sie die Sprache ändern.

    
Aaron Lelevier 22.08.2013 23:52
quelle
1

Wenn Sie in Ihrem aktuellen System nur zwei Sprachen haben, verwenden Sie einfach wie folgt:

%Vor%

Keine Notwendigkeit für ein Formular, eine URL und einreichen etc. Es hat für mich funktioniert.

    
sreekanth kuriyala 08.12.2014 10:25
quelle