【发布时间】:2021-07-17 22:10:48
【问题描述】:
我有一个有两种语言的网站(它会及时获得更多)和一个用于切换语言的小下拉菜单。它在开发服务器中按预期/预期工作。访问网站时,网址如下所示:
localhost:8000/en/home
localhost:8000/pl/home
django 项目部署在服务器(Apache w/ mod-wsgi)的子目录位置,比如说:
mysite.com/django
一切都按预期工作,即使是该子目录下的管理站点等,但是,我更改语言的小菜单不再起作用。当我更改语言时,页面会重新加载,但使用与我尝试更改时相同的语言。我可以通过手动更改浏览器中的 url 在语言之间来回切换,并且所有页面都可以按预期使用翻译;它只是不再起作用的下拉按钮。
mysite.com/django/en/home
mysite.com/django/pl/home
起初,我以为这是我的按钮(教程中的标准):
<form action="{% url 'set_language' %}" method="post" class="form-inline">{% csrf_token %}
<div class="form-group mx-sm-3 mb-0">
<input type="hidden" name="text" value="{{ redirect_to }}" class="form-control form-control-sm">
<select name="language" id="langselect" onchange="this.form.submit()">
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}" {% if language.code == LANGUAGE_CODE %} selected {% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
</div>
</form>
但实际上,如果我更改 Apache 配置以将站点部署在服务器根 mysite.com(只是为了尝试隔离问题),下拉按钮、翻译和其他一切都会按预期工作。我认为这意味着 i18n 在某处生成了虚假链接,即它没有以正确的方式实现 '/django' 子目录前缀。
我觉得这应该是一个简单的解决方法——一个在某处切换的设置——但我花了一天的大部分时间在谷歌上搜索和阅读文档后感到很困惑。我很乐意分享设置等的 sn-ps,但老实说,我不确定什么是相关的。
有人可以用关键字或如何解决这个问题的建议指出我正确的方向吗?
编辑 1:
我尝试将前缀添加到 <input> 标记中的值。所以它显示为value="/django{{ redirect_to }}",但这也不起作用。
编辑 2 和 4:
在网络检查器打开的情况下使用我的切换器按钮显示 setlang 函数调用了错误的 url。
mysite.com/django/django/i18n/setlang
我仍然不知道如何解决它,但我相当肯定这就是问题所在。
如果我将 apache 配置更改为部署在 mysite.com,则重定向是通过 mysite.com/i18n/setlang,所以我似乎需要以某种方式控制 django 子目录前缀的解释方式。但是如何?!?!?
编辑 3:
尽管没有重新加载到正确的语言,但切换器成功更改了 cookie。
【问题讨论】:
标签: django internationalization subdirectory