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

Copy-icon

По умолчанию CMS Engine предполагает, что таргетированный контент структурирован внутри папок непосредственно под rootFolders. Следовательно, согласно предоставленной выше конфигурации:

  1. Таргетирование активируется через свойство targeting.enabled.
  2. Каждая подпапка под /site/website (targeting.rootFolders) содержит контент для разных локалей, таких как enesfrjp и так далее.
  3. Например, если 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.
  4. Свойство 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.
  5. Обычно, если пользователь переходит на 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.

Настройка таргетированного контента

Как уже упоминалось выше, хотя языковая локализация - основное применение таргетированного контента, это не единственное его применение. Существуют случаи, когда таргетированный контент должен учитывать такие факторы, как местоположение пользователя, страна, возраст и пол. Для таких сценариев необходимы дополнительные шаги по кодированию и настройке:

  1. Для начала включите ru.dc.cms.engine.targeting.TargetIdManager. Разместите его в папке groovy вашего проекта в разделе Classes, обеспечивая соответствие подпапок структуре пакетов Java (например, Classes > groovy > services > targeting > RegionAndCountryTargetIdManager).
    • Метод getCurrentTargetId() должен предоставлять идентификатор цели, соответствующий текущему пользователю, при необходимости используя значение по умолчанию, если ничего не назначено. Например, если мы ориентируемся на контент на основе региона и страны, getCurrentTargetId() должен возвращать идентификатор region_country пользователя (например, nana_uslanlan_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 этот список будет включать все потенциальные комбинации региона/страны, такие как nana_usna_calanlan_cr и т. д.
  2. Интегрируйте реализацию TargetIdManager как Spring bean в application-context.xml вашего проекта (Config > spring > application-context.xml), присвоив ему имя cms.targetIdManager.

<bean id="cms.targetIdManager" class="services.targeting.RegionAndCountryTargetIdManager"/>

Copy-icon

Таргетирование контента при помощи префикса файла

По умолчанию CMS Engine ожидает, что таргетированный контент будет структурирован по папкам. Обычно страницы в директории /site/website группируются по локализации, например, страницы на английском размещаются в /site/website/en, страницы на испанском — в /site/website/es и так далее.

Однако существуют случаи, когда более эффективно объединить контент для разных целей в одном месте. В таких случаях CMS Engine может разрешать целевой контент на основе префиксов файлов, таких как index_en.xmlindex_en_US.xmlindex_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"/>

Copy-icon

Локаль проекта

Этот раздел позволяет настроить языковую локаль по умолчанию для вашего проекта. Если языковая локаль по умолчанию не указана, системная локаль станет языковой локалью по умолчанию.

(General Properties)
<defaultLocale />  (Default locale for the site)

Copy-icon