Локализация контента в 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)