【问题标题】:Why this form doesn't change the language of the website?为什么这个表格不会改变网站的语言?
【发布时间】:2021-12-10 07:19:15
【问题描述】:

这是我的语言转换表格。

{% get_current_language as lang_code %}
{% get_available_languages as languages %}
{% get_language_info_list for languages as langs %}
<form action="{% url 'set_language' %}" method="POST">
{% csrf_token %}
<select name="language" title="{% translate 'Language' %}">
{% for lang in langs %}
<option value="{{ lang.code }}"{% if lang.code == lang_code %} selected{% endif %}>
{{ lang.name_local }} ({{ lang.name_translated }})
</option>
{% endfor %}
</select>
<input type="submit" value="OK" />
</form>

我将它包含在我的基本模板的页脚中。

然后,这是我的课程/urls.py(应用程序网址)。

from django.contrib import admin
from django.urls import path
from django.utils.translation import gettext_lazy as _
from . import views

admin.site.site_header = _("FilFak administration")
admin.site.site_title = _("FilFak admin")
admin.site.index_title = _("Manage FilFak")

urlpatterns=[
    path("courses/", views.CourseList.as_view(), name="course_list"),
    path("professors/", views.ProfessorList.as_view(), name="professor_list"),
    path("exams/", views.ExamList.as_view(), name="exam_list"),
    path("courses/<slug:slug>", views.CourseDetails.as_view(), name="course_details"),
    path("professors/<slug:slug>", views.ProfessorDetails.as_view(), name="professor_details"),
    path("exams/<slug:slug>", views.ExamDetails.as_view(), name="exam_details"),
    path("", views.Index.as_view(), name="index"),
]

filfak/urls.py(项目 urls.py)

from django.contrib import admin
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls.static import static
from django.conf import settings
from django.utils.translation import gettext_lazy as _

urlpatterns = [
    path("admin/", admin.site.urls),
    path("lang/", include("django.conf.urls.i18n")),
]

urlpatterns += i18n_patterns(
    path("", include("courses.urls")),
    prefix_default_language=False
)

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这是来自 settings.py 的中间件列表。

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.locale.LocaleMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
]

当我在语言切换表单上单击“确定”时,它实际上只在默认语言的主页上更改了语言。在任何其他 URL 上,它只是刷新页面,而不更改语言。

我是不是做错了什么?

【问题讨论】:

  • 看起来您需要更新所选语言的视图代码,您能取悦那个代码吗?
  • 我使用 django.conf.urls.i18n set_language 来处理切换,而不是自定义视图。
  • 在你的其他页面上你能看到切换的语言被选中还是移回默认语言?
  • 它没有改变。例如,我有西班牙语、英语和德语作为可用语言,西班牙语是默认语言。当我转到 /en/courses 并从下拉菜单中选择德语,然后单击“确定”时,页面刷新,我仍然看到它是英语,在下拉菜单中选择了英语。
  • 酷,可以分享settings.py中的中间件列表

标签: python django django-templates internationalization django-i18n


【解决方案1】:

检查USE_I18N的标志值,看起来它设置为False,这就是语言设置不正确的原因。

将其更改为:-

USE_I18N = True

根据 Django 文档:-

如果你不使用国际化,你应该花两秒钟在你的设置文件中设置 USE_I18N = False。

【讨论】:

  • ``` LANGUAGE_CODE = "es" LANGUAGES = [("en", "English"), ("es", "Español (España)"), ("de", "Deutsch" )] LOCALE_PATHS = [os.path.join(BASE_DIR, "locale")] USE_I18N = True USE_L10N = True USE_TZ = True ``
  • 好的,所以当您切换到任何语言时,您可以在浏览器中使用这样的 url (127.0.0.1:8000/<lang_code>) 吗?
  • 是的,手动去那里工作。
猜你喜欢
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 2011-09-04
  • 2021-04-18
  • 2011-07-23
  • 1970-01-01
  • 2016-03-04
  • 2020-03-11
相关资源
最近更新 更多