Django 如何允许来自管理员和来宾语言选择器的翻译
Django how to allow translation from admin and guest language picker
我已经阅读了 django 中关于如何使您的网站支持更多语言的文档。
老实说,所有这些听起来都很复杂,所以我需要帮助来清除所有内容。
首先,我想做以下事情:
- 以多种语言提供网站,但仅限于访客。因此,即使他们没有登录,他们也可以更改语言。我认为这可能可以使用 URL,例如
website.com/en/index
website.com/es/index
等。我找到了 this 项目,但是似乎已经过时了,我正在寻找是否有任何内置方法可以做到这一点。
- 如果我执行上述操作,如果用户使用
website.com/es/index
之类的直接 link 进入网站,然后单击网站的 url 我如何确保会遵循相同的操作用户输入网站的语言?
- 翻译django应用程序是通过普通文件进行的,真是太可惜了!!有没有办法允许使用管理界面进行翻译?我找到了 this 但我遇到了问题(也已过时)并且互联网上没有此类信息。
我不是在找人来解决我的问题,而是在寻找正确的方向:
- 为客人提供不同语言的网站(点击网站 urls 将记住客人的语言偏好)。
- 我们是否可以允许翻译人员使用管理界面而不是不友好的翻译 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 处理翻译的方式。翻译一些关于管理站点的东西会涉及到数据库,我认为使用数据库进行翻译不是一个好主意。
我已经阅读了 django 中关于如何使您的网站支持更多语言的文档。
老实说,所有这些听起来都很复杂,所以我需要帮助来清除所有内容。
首先,我想做以下事情:
- 以多种语言提供网站,但仅限于访客。因此,即使他们没有登录,他们也可以更改语言。我认为这可能可以使用 URL,例如
website.com/en/index
website.com/es/index
等。我找到了 this 项目,但是似乎已经过时了,我正在寻找是否有任何内置方法可以做到这一点。 - 如果我执行上述操作,如果用户使用
website.com/es/index
之类的直接 link 进入网站,然后单击网站的 url 我如何确保会遵循相同的操作用户输入网站的语言? - 翻译django应用程序是通过普通文件进行的,真是太可惜了!!有没有办法允许使用管理界面进行翻译?我找到了 this 但我遇到了问题(也已过时)并且互联网上没有此类信息。
我不是在找人来解决我的问题,而是在寻找正确的方向:
- 为客人提供不同语言的网站(点击网站 urls 将记住客人的语言偏好)。
- 我们是否可以允许翻译人员使用管理界面而不是不友好的翻译 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 处理翻译的方式。翻译一些关于管理站点的东西会涉及到数据库,我认为使用数据库进行翻译不是一个好主意。