Как обслуживать несколько языков¶
Если вы использовали django CMS installer для запуска своего проекта, вы увидите, что он уже настроен для обслуживания многоязычного контента. То же самое делает и наше руководство Как установить django CMS вручную.
Это руководство описывает шаги, необходимые для включения многоязыковой поддержки, на случай, если вам понадобится сделать это вручную.
Многоязычные URL-адреса¶
Если вы используете более одного языка, ссылки на URL-адреса django CMS, включая URL-адреса администратора, должны быть указаны через i18n_patterns()
. Для получения дополнительной информации об этом смотрите официальную статью Django documentation по этому вопросу.
Вот полный пример urls.py
:
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.urls import include, re_path
from django.views.i18n import JavaScriptCatalog
admin.autodiscover()
urlpatterns = i18n_patterns(
re_path(r'^jsi18n/$', JavaScriptCatalog.as_view(), name='javascript-catalog'),
)
urlpatterns += staticfiles_urlpatterns()
# note the django CMS URLs included via i18n_patterns
urlpatterns += i18n_patterns(
re_path(r'^admin/', include(admin.site.urls)),
re_path(r'^', include('cms.urls')),
)
Одноязычные URL-адреса¶
Конечно, если вам нужны только одноязычные URL, без кода языка, просто не используйте i18n_patterns()
:
urlpatterns += [
re_path(r'^admin/', admin.site.urls),
re_path(r'^', include('cms.urls')),
]
Хранить языковые предпочтения пользователя¶
Предпочтительный язык пользователя сохраняется в течение сеанса просмотра. Чтобы django CMS помнил предпочтения пользователя в последующих сессиях, они должны храниться в куках. Чтобы включить это, cms.middleware.language.LanguageCookieMiddleware
должно быть добавлено к настройке проекта MIDDLEWARE
.
См. Как django CMS определяет, какой язык обслуживать для получения дополнительной информации о том, как это работает.
Работа в шаблонах¶
Отображение выбора языка на странице¶
Тег шаблона language_chooser
отображает выбор языка для текущей страницы. При необходимости вы можете изменить шаблон в menu/language_chooser.html
или предоставить свой собственный шаблон.
Пример:
{% load menu_tags %}
{% language_chooser "myapp/language_chooser.html" %}
Если вы находитесь в apphook и имеете детальное представление объекта, вы можете установить объект на панель инструментов в вашем представлении. cms вызовет get_absolute_url
на соответствующем языке для выбора языка:
Пример:
class AnswerView(DetailView):
def get(self, *args, **kwargs):
self.object = self.get_object()
if hasattr(self.request, 'toolbar'):
self.request.toolbar.set_object(self.object)
response = super().get(*args, **kwargs)
return response
С помощью этого вы можете легче контролировать, какой url будет возвращен в выборе языка.
Примечание
Если у вас есть многоязычные объекты, убедитесь, что вы возвращаете правильный url, если у вас нет перевода для этого языка в get_absolute_url
.
Получение URL текущей страницы для другого языка¶
page_language_url
возвращает URL текущей страницы на другом языке.
Пример:
{% page_language_url "de" %}
Настройка поведения при работе с языками¶
CMS_LANGUAGES
описывает все доступные опции для определения того, как django CMS обслуживает содержимое на нескольких языках.