本文介绍了您如何翻译页面的子弹值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试实现语言切换器,为此我使用了Django建议的形式:

I'm trying to implement a language switcher, for which I'm using the Django recommended form:

    <form action="{% url 'set_language' %}" method="post">{% csrf_token %}
        {% get_current_language as LANGUAGE_CODE %}
        <input name="next" type="hidden" value="{{ redirect_to }}">
        <input name="language" type="hidden" value="{% if LANGUAGE_CODE == 'en' %}es{% else %}en{% endif %}">
    </form>

我的urls.py设置如下:

My urls.py is set up like so:

urlpatterns = [

    # Wagtail urls
    re_path(r'^cms/', include(wagtailadmin_urls)),
    re_path(r'^documents/', include(wagtaildocs_urls)),

    # Django urls
    path('admin/', admin.site.urls),
    path('i18n/', include('django.conf.urls.i18n')),

]

urlpatterns += i18n_patterns(
    path(r'', include(wagtail_urls))
)

当我单击以更改语言时,根据选择的语言,我会正确转发到/en/slug es/slug .但是,实际的子弹值未转换.由于我在西班牙语页面上有西班牙文,因此在切换语言时会收到404,因为我被定向到与西班牙文语言环境前缀( es )配对的英文Slug值.

When I click to change my language, I am correctly forwarded to /en/slug or es/slug, depending on the language I have selected. However the actual slug value is not being translated. Since I have Spanish slugs for the Spanish pages, I am getting a 404 when I switch languages, because I am directed to the English slug value paired with the Spanish locale prefix (es).

我还尝试使用 slugurl_trans 模板标记,但这似乎不起作用(也许是因为我没有在 i18n_patterns 调用中明确定义任何URL?).

I also tried using the slugurl_trans template tag, but that didn't seem to work (maybe because I'm not explicitly defining any URLs in my i18n_patterns call?).

任何有关此的指导都将非常有帮助,因为我在此上花费了太多时间!

Any guidance on this would be really helpful, as I've spent way too many hours on this!

推荐答案

虽然很长,但无论如何我都会发布一个答案,摆脱这种不同的弹头问题的最好方法是使用django这样的信号

It has been long but I'm going to post an answer anyway, the best way to get rid of the different slugs problem is by using django signals like this

@receiver(pre_save)
def set_translated_slug_on_new_instance(sender, instance, **kwargs):
    if isinstance(instance, Page):
        instance.slug_es = instance.slug_en

这篇关于您如何翻译页面的子弹值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 05:24