#python #django
#python #django
Вопрос:
У меня есть два значка флага, и я готов предоставить им URL-адреса, чтобы определить, какой язык должен отображаться с использованием перевода Django. Хотя, я немного смущен этим. Как я могу это сделать? Чтобы быть более конкретным, когда клиент нажимает на флаг Ирана, языковой префикс в URL-адресе должен быть изменен на ‘fa-ir’ (www.domain.com/fa-ir/products )
HTML:
<ul class="navbar-nav d-block d-lg-none ml-auto mr-3">
<li class="nav-item">
<a href="{% url 'products'%}"><div class="ukflag mr-1"></div></a>
<a href="fa-ir/{% url 'products' %}"><div class="irflag"></div></a>
</li>
</ul>
Продукты.Views.py:
from django.shortcuts import render
from django.views.generic import TemplateView
class ProductPageView(TemplateView):
template_name = 'products.html'
URLs.py:
from django.contrib import admin
from django.urls import include, path
from home.views import HomePageView
from products.views import ProductPageView
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import gettext_lazy as _
urlpatterns = i18n_patterns(
path(_('admin/'), admin.site.urls),
path("", HomePageView.as_view(), name='home'),
path(_('products/'), ProductPageView.as_view(), name='products'),
prefix_default_language = False
)
Ответ №1:
Если вы хотите предоставить селектор языка, вы могли бы сделать что-то вроде этого;
{% load i18n %}
{% get_available_languages as languages %}
<form action="{% url "set_language" %}" method="post">
{% csrf_token %}
<div class="form-group">
<select name="language" class="form-control" onchange="this.form.submit()">
{% for language in languages %}
<option value="{{ language.code }}"
{% if language.code == LANGUAGE_CODE %}selected="selected"{% endif %}>
{{ language.name_local }}
</option>
{% endfor %}
</select>
</div>
</form>
{% endif %}
Когда вы выбираете выбор и запрос попадает в это set_language
представление, система активирует выбранный язык. Затем, когда вы просматриваете страницу, вы увидите такие вещи, как ссылки с префиксом текущего языка.
Затем, чтобы использовать эту логику и применить ее к вашей разметке, может быть, вы могли бы использовать код языка для установки своих флагов?
<ul class="navbar-nav d-block d-lg-none ml-auto mr-3">
{% for language in languages %}
<li class="nav-item">
<a href="{% url 'products'%}"><div class="{{language.code}}flag mr-1"></div></a>
</li>
{% endfor %}
</ul>
Ссылки в форме будут указывать на активированный язык, например /en/products/
. Вот почему в языковом селекторе вы не использовали i18n
бы для отображения вариантов, потому что вы хотите, чтобы они были специфичны для говорящего на этом языке и не переводились на текущий язык.
Комментарии:
1. Я предполагаю, что с {{language.code}} что-то не так, поскольку он не работает как класс и, как следствие, не показывает никаких флагов на веб-сайте.
2. Оказывается, мне нужно получить имена классов, используя {{language.0}} . Хотя оба тега привязки ссылаются на ‘/en-us /products’
3. Он не будет автоматически отображать флаги. Я хотел сказать, что вы можете использовать языковые коды в своем CSS или что-то в этом роде для отображения флагов.
4. Конечно. как я уже сказал во втором комментарии, я понял это 🙂 однако проблема заключается в установке языковых префиксов в URL, чтобы менять язык при нажатии на каждый из флагов. поскольку оба тега привязки указывают на ‘en-us / products’
5. Поместите форму в верхней части моего ответа на свою страницу, и это позволит вам изменить язык.