Django如何允许从管理员和客户语言选择器进行翻译

时间:2016-07-02 17:46:57

标签: django multilingual

我已阅读django关于如何以更多语言提供网站的文档。

说实话,所有声音都非常复杂,所以我需要帮助才能清除所有内容。

首先,我想做以下事情:

  1. 将网站提供多种语言,但仅限访客。因此,即使他们没有登录,他们也能够更改语言。我认为这可能使用website.com/en/index website.com/es/index等网址。我找到了this项目,但似乎已过时我正在寻找是否有任何内置的方法来做同样的事情。
  2. 如果我执行上述操作,如果用户使用website.com/es/index之类的直接链接进入网站,请点击该网站的网址,我如何确保其遵循用户输入的相同语言网站?
  3. 翻译django应用程序是通过普通文件制作的,真是太遗憾了!有没有办法允许使用管理界面进行翻译?我找到了this,但我遇到了问题(也已经过时了),互联网上没有这样的信息。
  4. 我不是在找人解决我的问题,而是为了让我朝着正确的方向努力:

    1. 使网站可以使用不同的语言(点击网站网址会记住客人的语言偏好)。
    2. 如果我们允许翻译人员使用admin ineterface进行转换而不是对翻译器django文件不友好?
    3. 提前谢谢你。

1 个答案:

答案 0 :(得分:1)

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

  • 您将django.middleware.locale.LocaleMiddleware添加到中间件
  • 在settings.py,
  • 中配置区域设置
  • 使用urls.py
  • 将您的网址包装在django.conf.urls.i18n.i18n_patterns
  • 翻译字符串

你已经完成了。

对于使用site.com/en/lorem-ipsum包裹的网址,您会获得django.conf.urls.i18n.i18n_patterns等网址。

更具体地说明您的问题:

1)这是默认行为。如果您使用django.conf.urls.i18n.i18n_patterns包装管理员网址,您也将获得多种语言的管理网站。使用相同的网址格式,例如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)所有网址都是一致的语言环境。例如。如果用户在site.com/en/home并且有关于产品页面的链接,则该链接将是“site.com/en/about”

3)我可以理解,在不编辑gettext文件等的情况下更新管理站点上的翻译会容易得多。但是,我喜欢django处理翻译的方式。对管理站点进行翻译会涉及数据库,我不认为使用数据库进行翻译是个好主意。