【问题标题】:How do you translate the slug value of a page?您如何翻译页面的 slug 值?
【发布时间】:2020-01-02 01:31:56
【问题描述】:

我正在尝试实现一个语言切换器,为此我使用了 Django 推荐的表单:

    <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 是这样设置的:

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/sluges/slug,具体取决于我选择的语言。但是,实际的 slug 值没有被转换。由于我的西班牙语页面有西班牙语 slug,所以当我切换语言时会得到 404,因为我被定向到与西班牙语区域设置前缀 (es) 配对的英语 slug 值。

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

任何关于这方面的指导都会很有帮助,因为我在这方面花了太多时间!

【问题讨论】:

  • 你在 Wagtail 文档中看到过这个吗? docs.wagtail.io/en/latest/advanced_topics/i18n/…
  • @DanSwain 感谢您的回复!不幸的是,我真的不认为这是相关的,因为它使用重复的页面树来实现语言切换。由于我使用的是django-modeltranslation,据我所知,应该开箱即用。使用django-modeltranslation,如果我访问slug_es 链接,页面将仅使用我在CMS 中设置的西班牙语字段呈现。
  • 当然。不知道这是否有用,但我只是偶然发现了它:github.com/springload/awesome-wagtail#translations

标签: django wagtail django-modeltranslation


【解决方案1】:

已经很久了,但无论如何我都会发布一个答案,摆脱不同 slugs 问题的最佳方法是使用像这样的 django 信号

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 2021-09-14
    • 2019-05-12
    • 1970-01-01
    • 2013-07-03
    相关资源
    最近更新 更多