Настройка URL для перевода Django

#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. Поместите форму в верхней части моего ответа на свою страницу, и это позволит вам изменить язык.