首先,让我解释一下问题:
i18_patterns在你
urls.py的语言代码中添加前缀时,如果你调用
URL set_language更改语言而未指定next,则默认为当前语言,但使用的是旧的语言代码!因此,该语言恢复了原来的语言!并且,如果你明确指定next,则必须确保一开始就不要包含语言代码。
如果你使用
{{ request.path }}或将该页面{{ request.get_full_path }}指定next为当前页面,则此操作将无效,因为它也会返回语言代码。因此,我们如何删除不希望使用的语言代码,以使用时更改的语言重新加载当前页面
i18n_patterns?容易,我们只需要切片3个第一个字符(斜杠和两个字符的语言代码)!
这里有两个例子。第一个以选择的形式(使用语言作为选择),另一个以按钮的形式(每种语言)。
我真的希望这对其他人有帮助。你可以复制并粘贴代码,它应该可以工作。但是,如果使用“按钮形式”,则只需将语言设置为所需的语言即可!
从列表中更改语言:
<form action="{% url 'set_language' %}" method="post"> {% csrf_token %} <input name="next" type="hidden" value="{{ request.get_full_path|slice:'3:' }}" /> <select name="language"> {% get_language_info_list for LANGUAGES as languages %} {% for language in languages %} <option value="{{ language.pre }}"{% if language.pre == LANGUAGE_CODE %} selected="selected"{% endif %}> {{ language.name_local }} ({{ language.pre }}) </option> {% endfor %} </select> <input type="submit" value="Change" /></form>将语言更改为按钮:
<form action="{% url 'set_language' %}" method="post"> {% csrf_token %} <input name="next" type="hidden" value="{{ request.get_full_path|slice:'3:' }}" /> <input name="language" type="hidden" value="es" /> <input type="submit" value="ES" /></form>


