【发布时间】: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/slug 或es/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