Локализация контента в DC CMS
CMS Engine предлагает функцию, позволяющую настраивать отображение контента для каждого отдельного пользователя, учитывая такие факторы, как географическое положение, язык, предпочтения и многое другое. В рамках DC CMS такой персонализированный контент называется таргетированным контентом.
Локализация на основе языка
Одним из распространенных типов таргетирования контента является локализация на основе языка, которую легко активировать, настроив параметры в конфигурации Engine.
Для доступа к файлу конфигурации проекта Engine в боковой панели слева нажмите на Инструменты сайта > Конфигурация > Конфигурация ядра проекта.
<?xml version="1.0" encoding="UTF-8"?>
<site>
<targeting>
<enabled>true</enabled>
<rootFolders>/site/website</rootFolders>
<fallbackTargetId>en</fallbackTargetId>
<mergeFolders>true</mergeFolders>
<redirectToTargetedUrl>true</redirectToTargetedUrl>
</targeting>
</site>
По умолчанию CMS Engine предполагает, что таргетированный контент структурирован внутри папок непосредственно под rootFolders
. Следовательно, согласно предоставленной выше конфигурации:
- Таргетирование активируется через свойство
targeting.enabled
. - Каждая подпапка под
/site/website
(targeting.rootFolders
) содержит контент для разных локалей, таких какen
,es
,fr
,jp
и так далее. - Например, если Engine должен отрисовать
/site/website/index.xml
, а локаль пользователя -es_CMS
, он сначала попытается найти контент по пути/site/website/es_CMS/index.xml
, затем/site/website/es/index.xml
и, наконец, посколькуen
указан в качествеtargeting.fallbackTargetId
, по адресу/site/website/en/index.xml
. В случае отсутствияtargeting.fallbackTargetId
последняя доступная страница для отображения была бы/site/website/index.xml
. - Свойство
targeting.mergeFolders
заставит Engine создавать объединенные деревья контента, что полезно для навигации. Например, рассмотрим ситуацию, где верхнее меню страницы отображает страницы первого уровня под/site/website/{locale}
, и текущая локаль пользователя -es_CMS
. Вes_CMS
существует только страница "Контакты", в то время как подen
есть больше страниц: "Продукты", "О нас" и "Контакты". ВключениеmergeFolders
в значениеtrue
позволит навигации представлять страницы из/site/website/en/products
,/site/website/en/about-us
и/site/website/es_CMS/contact-us
. - Обычно, если пользователь переходит на
my-editorial.com/contact-us
, и текущая локаль -es_CMS
, то страница для отображения будет определена как/site/website/es_CMS/contact-us
, однако строка навигации браузера все равно будет отображатьmy-editorial.com/contact-us
. Однако, еслиtargeting.redirectToTargetedUrl
установлено в значениеtrue
, пользователь будет перенаправлен сначала наmy-editorial.com/es_CMS/contact-us
.
Важно отметить, что если страница существует несколько раз в рамках одной "семьи" локалей, таких как en
(fallback), es
и es_EN
, и стратегия слияния для страницы - targetedContent
, контент наследуется в соответствии с путем от самой общей локали к самой конкретной. Таким образом, /site/website/es_EN/contact-us
будет наследовать и перезаписывать контент /site/website/es/contact-us
и /site/website/en/contact-us
.
Настройка таргетированного контента
Как уже упоминалось выше, хотя языковая локализация - основное применение таргетированного контента, это не единственное его применение. Существуют случаи, когда таргетированный контент должен учитывать такие факторы, как местоположение пользователя, страна, возраст и пол. Для таких сценариев необходимы дополнительные шаги по кодированию и настройке:
- Для начала включите
ru.dc.cms.engine.targeting.TargetIdManager
. Разместите его в папке groovy вашего проекта в разделе Classes, обеспечивая соответствие подпапок структуре пакетов Java (например, Classes > groovy > services > targeting > RegionAndCountryTargetIdManager).- Метод
getCurrentTargetId()
должен предоставлять идентификатор цели, соответствующий текущему пользователю, при необходимости используя значение по умолчанию, если ничего не назначено. Например, если мы ориентируемся на контент на основе региона и страны,getCurrentTargetId()
должен возвращать идентификаторregion_country
пользователя (например,na
,na_us
,lan
,lan_cr
и т. д.). Если у пользователя нет связанного региона/страны, должно возвращаться значение по умолчаниюna
. - Метод
getFallbackTargetId()
должен предоставлять идентификатор резервной цели, служащий последним вариантом при разрешении URL-адресов страниц для отображения пользователю. Используя пример сregion_country
, предположим, что пользователь запрашивает страницу/about
с текущим идентификатором целиlan_dc
и резервным идентификатором целиna
. Engine будет искать страницу в/site/website/lan_cr/about/index.xml
,/site/website/lan/about/index.xml
и, наконец,/site/website/na/about/index.xml
. Если идентификатор резервной цели равенnull
, поиск будет выполнен в/site/website/about/index.xml
, а не в/site/website/lan_cr/about/index.xml
. - Метод
getAvailableTargetIds()
должен возвращать список, перечисляющий все поддерживаемые идентификаторы целей. В случае сregion_country
этот список будет включать все потенциальные комбинации региона/страны, такие какna
,na_us
,na_ca
,lan
,lan_cr
и т. д.
- Метод
- Интегрируйте реализацию
TargetIdManager
как Spring bean вapplication-context.xml
вашего проекта (Config > spring > application-context.xml), присвоив ему имяcms.targetIdManager
.
<bean id="cms.targetIdManager" class="services.targeting.RegionAndCountryTargetIdManager"/>
Таргетирование контента при помощи префикса файла
По умолчанию CMS Engine ожидает, что таргетированный контент будет структурирован по папкам. Обычно страницы в директории /site/website
группируются по локализации, например, страницы на английском размещаются в /site/website/en
, страницы на испанском — в /site/website/es
и так далее.
Однако существуют случаи, когда более эффективно объединить контент для разных целей в одном месте. В таких случаях CMS Engine может разрешать целевой контент на основе префиксов файлов, таких как index_en.xml
, index_en_US.xml
, index_fr.xml
и так далее. Чтобы активировать эту функциональность, включите следующий бин в файл application-context.xml
вашего проекта (расположенный в Config > spring > application-context.xml), переопределяя таким образом стратегию по умолчанию организации таргетированного контента по папкам.
<bean id="cms.targetedUrlStrategy"
class="ru.dc.cms.engine.targeting.impl.TargetedUrlByFileStrategy"
parent="cms.targetedUrlStrategyBase"/>
Локаль проекта
Этот раздел позволяет настроить языковую локаль по умолчанию для вашего проекта. Если языковая локаль по умолчанию не указана, системная локаль станет языковой локалью по умолчанию.
(General Properties)
<defaultLocale /> (Default locale for the site)