Python 设置Django翻译的URL

Python 设置Django翻译的URL,python,django,Python,Django,我有两个标志图标,我愿意给他们的网址,以确定哪种语言应该显示使用Django翻译。不过,我对此有点困惑。我怎么能做这样的事? 更具体地说,当客户端单击伊朗国旗时,URL中的语言前缀应更改为“fa-ir”() HTML: URL.py: from django.contrib import admin from django.urls import include, path from home.views import HomePageView from products.views i

我有两个标志图标,我愿意给他们的网址,以确定哪种语言应该显示使用Django翻译。不过,我对此有点困惑。我怎么能做这样的事? 更具体地说,当客户端单击伊朗国旗时,URL中的语言前缀应更改为“fa-ir”()

HTML:

URL.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
)

如果你想提供一个语言选择器,你可以这样做

{% 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 %}

表单中的链接将指向激活的语言,例如
/en/products/
。这就是为什么在语言选择器中,您不会使用
i18n
来显示选项,因为您希望这些选项特定于该语言的使用者&而不是翻译成当前语言。

我猜{language.code}有点问题,因为它不能作为类工作,因此,它没有在网站上显示任何标志。事实证明,我必须使用{{language.0}获取类名。不过,这两个锚定标记都引用“/en us/products”,它不会自动显示标志。我的观点是,你可以使用CSS中的语言代码或其他东西来显示标志。正如我在第二条评论中所说的,我得到了:)然而,问题是在URL中设置语言前缀,以便在单击每个标志时更改语言。由于两个锚定标签都指向“en-us/products”,请将我答案顶部的表格放入您的页面,这样您就可以更改语言。
    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
)
{% 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 %}