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:
Und das scheint nicht zu funktionieren. Wenn ich jedoch den i18n_patterns
entferne und ihn in patterns
ändere, scheint es zu funktionieren:
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.
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%Eine Zusammenfassung der möglichen Optionen:
select
Es gibt eine ausgezeichnete ausführliche Beschreibung mit einem Beispiel zu Django-Dokumenten .
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.
Wenn die standardmäßige Benutzersitzungssprache nicht geändert werden muss, können einfache Links zum Ändern des Inhalts verwendet werden:
%Vor% 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.
Dieser Link:
Django: i18n - ändere die Sprache
kann das haben, wonach Sie suchen, wenn Sie die Sprache ändern.
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.
Tags und Links python django internationalization django-i18n