Django 如何允许来自管理员和来宾语言选择器的翻译

Django how to allow translation from admin and guest language picker

我已经阅读了 django 中关于如何使您的网站支持更多语言的文档。

老实说,所有这些听起来都很复杂,所以我需要帮助来清除所有内容。

首先,我想做以下事情:

  1. 以多种语言提供网站,但仅限于访客。因此,即使他们没有登录,他们也可以更改语言。我认为这可能可以使用 URL,例如 website.com/en/index website.com/es/index 等。我找到了 this 项目,但是似乎已经过时了,我正在寻找是否有任何内置方法可以做到这一点。
  2. 如果我执行上述操作,如果用户使用 website.com/es/index 之类的直接 link 进入网站,然后单击网站的 url 我如何确保会遵循相同的操作用户输入网站的语言?
  3. 翻译django应用程序是通过普通文件进行的,真是太可惜了!!有没有办法允许使用管理界面进行翻译?我找到了 this 但我遇到了问题(也已过时)并且互联网上没有此类信息。

我不是在找人来解决我的问题,而是在寻找正确的方向:

  1. 为客人提供不同语言的网站(点击网站 urls 将记住客人的语言偏好)。
  2. 我们是否可以允许翻译人员使用管理界面而不是不友好的翻译 django 文件进行转换?

提前谢谢你。

你不需要任何第三方包来完成你想做的事情,Django 已经内置了它。

  • 您将 django.middleware.locale.LocaleMiddleware 添加到您的中间件,
  • 在 settings.py、
  • 中配置语言环境
  • django.conf.urls.i18n.i18n_patterns
  • 将 url 包裹在 urls.py
  • 翻译您的字符串

大功告成。

对于用 django.conf.urls.i18n.i18n_patterns 包装的 url,您会得到 url 就像 site.com/en/lorem-ipsum

更具体地说明您的问题:

1) 这是默认行为。如果你用 django.conf.urls.i18n.i18n_patterns 包装 admin url,你也会得到多种语言的管理站点。使用相同的 url 样式,如 site.com/en/admin/。这是一个例子 urls.py:

from django.conf.urls import url, include, i18n
from django.contrib import admin

urlpatterns += i18n.i18n_patterns(
    url(r'^admin/', admin.site.urls),
    url(r'^products/', include('your_project.apps.products.urls', namespace='products')),
    # ...
)

2) 所有 urls 将在语言环境方面保持一致。例如。如果用户在 site.com/en/home 并且关于产品页面有 link,则 link 将是 `site.com/en/about'

3) 我能理解,如果不编辑 gettext 文件等,在管理站点上更新翻译会容易得多。但是,我喜欢 django 处理翻译的方式。翻译一些关于管理站点的东西会涉及到数据库,我认为使用数据库进行翻译不是一个好主意。