问题描述
我正在尝试实现语言切换器,为此我使用了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
这篇关于您如何翻译页面的子弹值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!